18 #ifndef UA_DYNAMIC_LINKING_EXPORT 19 # define UA_DYNAMIC_LINKING_EXPORT 110 #if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC)) 111 #define _Q_INVALIDATE(a) (a) = ((void *)-1) 113 #define _Q_INVALIDATE(a) 119 #define SLIST_HEAD(name, type) \ 121 struct type *slh_first; \ 124 #define SLIST_HEAD_INITIALIZER(head) \ 132 #define SLIST_ENTRY(type) \ 134 struct type *sle_next; \ 140 #define SLIST_FIRST(head) ((head)->slh_first) 141 #define SLIST_END(head) NULL 142 #define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) 143 #define SLIST_NEXT(elm, field) ((elm)->field.sle_next) 145 #define SLIST_FOREACH(var, head, field) \ 146 for((var) = SLIST_FIRST(head); \ 147 (var) != SLIST_END(head); \ 148 (var) = SLIST_NEXT(var, field)) 150 #define SLIST_FOREACH_SAFE(var, head, field, tvar) \ 151 for ((var) = SLIST_FIRST(head); \ 152 (var) && ((tvar) = SLIST_NEXT(var, field), 1); \ 158 #define SLIST_INIT(head) { \ 159 SLIST_FIRST(head) = SLIST_END(head); \ 162 #define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ 163 (elm)->field.sle_next = (slistelm)->field.sle_next; \ 164 (slistelm)->field.sle_next = (elm); \ 167 #define SLIST_INSERT_HEAD(head, elm, field) do { \ 168 (elm)->field.sle_next = (head)->slh_first; \ 169 (head)->slh_first = (elm); \ 172 #define SLIST_REMOVE_AFTER(elm, field) do { \ 173 (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \ 176 #define SLIST_REMOVE_HEAD(head, field) do { \ 177 (head)->slh_first = (head)->slh_first->field.sle_next; \ 180 #define SLIST_REMOVE(head, elm, type, field) do { \ 181 if ((head)->slh_first == (elm)) { \ 182 SLIST_REMOVE_HEAD((head), field); \ 184 struct type *curelm = (head)->slh_first; \ 186 while (curelm->field.sle_next != (elm)) \ 187 curelm = curelm->field.sle_next; \ 188 curelm->field.sle_next = \ 189 curelm->field.sle_next->field.sle_next; \ 190 _Q_INVALIDATE((elm)->field.sle_next); \ 197 #define LIST_HEAD(name, type) \ 199 struct type *lh_first; \ 202 #define LIST_HEAD_INITIALIZER(head) \ 205 #define LIST_ENTRY(type) \ 207 struct type *le_next; \ 208 struct type **le_prev; \ 214 #define LIST_FIRST(head) ((head)->lh_first) 215 #define LIST_END(head) NULL 216 #define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) 217 #define LIST_NEXT(elm, field) ((elm)->field.le_next) 219 #define LIST_FOREACH(var, head, field) \ 220 for((var) = LIST_FIRST(head); \ 221 (var)!= LIST_END(head); \ 222 (var) = LIST_NEXT(var, field)) 224 #define LIST_FOREACH_SAFE(var, head, field, tvar) \ 225 for ((var) = LIST_FIRST(head); \ 226 (var) && ((tvar) = LIST_NEXT(var, field), 1); \ 232 #define LIST_INIT(head) do { \ 233 LIST_FIRST(head) = LIST_END(head); \ 236 #define LIST_INSERT_AFTER(listelm, elm, field) do { \ 237 if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ 238 (listelm)->field.le_next->field.le_prev = \ 239 &(elm)->field.le_next; \ 240 (listelm)->field.le_next = (elm); \ 241 (elm)->field.le_prev = &(listelm)->field.le_next; \ 244 #define LIST_INSERT_BEFORE(listelm, elm, field) do { \ 245 (elm)->field.le_prev = (listelm)->field.le_prev; \ 246 (elm)->field.le_next = (listelm); \ 247 *(listelm)->field.le_prev = (elm); \ 248 (listelm)->field.le_prev = &(elm)->field.le_next; \ 251 #define LIST_INSERT_HEAD(head, elm, field) do { \ 252 if (((elm)->field.le_next = (head)->lh_first) != NULL) \ 253 (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ 254 (head)->lh_first = (elm); \ 255 (elm)->field.le_prev = &(head)->lh_first; \ 258 #define LIST_REMOVE(elm, field) do { \ 259 if ((elm)->field.le_next != NULL) \ 260 (elm)->field.le_next->field.le_prev = \ 261 (elm)->field.le_prev; \ 262 *(elm)->field.le_prev = (elm)->field.le_next; \ 263 _Q_INVALIDATE((elm)->field.le_prev); \ 264 _Q_INVALIDATE((elm)->field.le_next); \ 267 #define LIST_REPLACE(elm, elm2, field) do { \ 268 if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \ 269 (elm2)->field.le_next->field.le_prev = \ 270 &(elm2)->field.le_next; \ 271 (elm2)->field.le_prev = (elm)->field.le_prev; \ 272 *(elm2)->field.le_prev = (elm2); \ 273 _Q_INVALIDATE((elm)->field.le_prev); \ 274 _Q_INVALIDATE((elm)->field.le_next); \ 280 #define SIMPLEQ_HEAD(name, type) \ 282 struct type *sqh_first; \ 283 struct type **sqh_last; \ 286 #define SIMPLEQ_HEAD_INITIALIZER(head) \ 287 { NULL, &(head).sqh_first } 289 #define SIMPLEQ_ENTRY(type) \ 291 struct type *sqe_next; \ 297 #define SIMPLEQ_FIRST(head) ((head)->sqh_first) 298 #define SIMPLEQ_END(head) NULL 299 #define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) 300 #define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) 302 #define SIMPLEQ_FOREACH(var, head, field) \ 303 for((var) = SIMPLEQ_FIRST(head); \ 304 (var) != SIMPLEQ_END(head); \ 305 (var) = SIMPLEQ_NEXT(var, field)) 307 #define SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ 308 for ((var) = SIMPLEQ_FIRST(head); \ 309 (var) && ((tvar) = SIMPLEQ_NEXT(var, field), 1); \ 315 #define SIMPLEQ_INIT(head) do { \ 316 (head)->sqh_first = NULL; \ 317 (head)->sqh_last = &(head)->sqh_first; \ 320 #define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ 321 if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ 322 (head)->sqh_last = &(elm)->field.sqe_next; \ 323 (head)->sqh_first = (elm); \ 326 #define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ 327 (elm)->field.sqe_next = NULL; \ 328 *(head)->sqh_last = (elm); \ 329 (head)->sqh_last = &(elm)->field.sqe_next; \ 332 #define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 333 if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ 334 (head)->sqh_last = &(elm)->field.sqe_next; \ 335 (listelm)->field.sqe_next = (elm); \ 338 #define SIMPLEQ_REMOVE_HEAD(head, field) do { \ 339 if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ 340 (head)->sqh_last = &(head)->sqh_first; \ 343 #define SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ 344 if (((elm)->field.sqe_next = (elm)->field.sqe_next->field.sqe_next) \ 346 (head)->sqh_last = &(elm)->field.sqe_next; \ 352 #define XSIMPLEQ_HEAD(name, type) \ 354 struct type *sqx_first; \ 355 struct type **sqx_last; \ 356 unsigned long sqx_cookie; \ 359 #define XSIMPLEQ_ENTRY(type) \ 361 struct type *sqx_next; \ 367 #define XSIMPLEQ_XOR(head, ptr) ((__typeof(ptr))((head)->sqx_cookie ^ \ 368 (unsigned long)(ptr))) 369 #define XSIMPLEQ_FIRST(head) XSIMPLEQ_XOR(head, ((head)->sqx_first)) 370 #define XSIMPLEQ_END(head) NULL 371 #define XSIMPLEQ_EMPTY(head) (XSIMPLEQ_FIRST(head) == XSIMPLEQ_END(head)) 372 #define XSIMPLEQ_NEXT(head, elm, field) XSIMPLEQ_XOR(head, ((elm)->field.sqx_next)) 375 #define XSIMPLEQ_FOREACH(var, head, field) \ 376 for ((var) = XSIMPLEQ_FIRST(head); \ 377 (var) != XSIMPLEQ_END(head); \ 378 (var) = XSIMPLEQ_NEXT(head, var, field)) 380 #define XSIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ 381 for ((var) = XSIMPLEQ_FIRST(head); \ 382 (var) && ((tvar) = XSIMPLEQ_NEXT(head, var, field), 1); \ 388 #define XSIMPLEQ_INIT(head) do { \ 389 arc4random_buf(&(head)->sqx_cookie, sizeof((head)->sqx_cookie)); \ 390 (head)->sqx_first = XSIMPLEQ_XOR(head, NULL); \ 391 (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ 394 #define XSIMPLEQ_INSERT_HEAD(head, elm, field) do { \ 395 if (((elm)->field.sqx_next = (head)->sqx_first) == \ 396 XSIMPLEQ_XOR(head, NULL)) \ 397 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 398 (head)->sqx_first = XSIMPLEQ_XOR(head, (elm)); \ 401 #define XSIMPLEQ_INSERT_TAIL(head, elm, field) do { \ 402 (elm)->field.sqx_next = XSIMPLEQ_XOR(head, NULL); \ 403 *(XSIMPLEQ_XOR(head, (head)->sqx_last)) = XSIMPLEQ_XOR(head, (elm)); \ 404 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 407 #define XSIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 408 if (((elm)->field.sqx_next = (listelm)->field.sqx_next) == \ 409 XSIMPLEQ_XOR(head, NULL)) \ 410 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 411 (listelm)->field.sqx_next = XSIMPLEQ_XOR(head, (elm)); \ 414 #define XSIMPLEQ_REMOVE_HEAD(head, field) do { \ 415 if (((head)->sqx_first = XSIMPLEQ_XOR(head, \ 416 (head)->sqx_first)->field.sqx_next) == XSIMPLEQ_XOR(head, NULL)) \ 417 (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ 420 #define XSIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ 421 if (((elm)->field.sqx_next = XSIMPLEQ_XOR(head, \ 422 (elm)->field.sqx_next)->field.sqx_next) \ 423 == XSIMPLEQ_XOR(head, NULL)) \ 425 XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 432 #define TAILQ_HEAD(name, type) \ 434 struct type *tqh_first; \ 435 struct type **tqh_last; \ 438 #define TAILQ_HEAD_INITIALIZER(head) \ 439 { NULL, &(head).tqh_first } 441 #define TAILQ_ENTRY(type) \ 443 struct type *tqe_next; \ 444 struct type **tqe_prev; \ 450 #define TAILQ_FIRST(head) ((head)->tqh_first) 451 #define TAILQ_END(head) NULL 452 #define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) 453 #define TAILQ_LAST(head, headname) \ 454 (*(((struct headname *)((head)->tqh_last))->tqh_last)) 456 #define TAILQ_PREV(elm, headname, field) \ 457 (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) 458 #define TAILQ_EMPTY(head) \ 459 (TAILQ_FIRST(head) == TAILQ_END(head)) 461 #define TAILQ_FOREACH(var, head, field) \ 462 for((var) = TAILQ_FIRST(head); \ 463 (var) != TAILQ_END(head); \ 464 (var) = TAILQ_NEXT(var, field)) 466 #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ 467 for ((var) = TAILQ_FIRST(head); \ 468 (var) != TAILQ_END(head) && \ 469 ((tvar) = TAILQ_NEXT(var, field), 1); \ 473 #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ 474 for((var) = TAILQ_LAST(head, headname); \ 475 (var) != TAILQ_END(head); \ 476 (var) = TAILQ_PREV(var, headname, field)) 478 #define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ 479 for ((var) = TAILQ_LAST(head, headname); \ 480 (var) != TAILQ_END(head) && \ 481 ((tvar) = TAILQ_PREV(var, headname, field), 1); \ 487 #define TAILQ_INIT(head) do { \ 488 (head)->tqh_first = NULL; \ 489 (head)->tqh_last = &(head)->tqh_first; \ 492 #define TAILQ_INSERT_HEAD(head, elm, field) do { \ 493 if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ 494 (head)->tqh_first->field.tqe_prev = \ 495 &(elm)->field.tqe_next; \ 497 (head)->tqh_last = &(elm)->field.tqe_next; \ 498 (head)->tqh_first = (elm); \ 499 (elm)->field.tqe_prev = &(head)->tqh_first; \ 502 #define TAILQ_INSERT_TAIL(head, elm, field) do { \ 503 (elm)->field.tqe_next = NULL; \ 504 (elm)->field.tqe_prev = (head)->tqh_last; \ 505 *(head)->tqh_last = (elm); \ 506 (head)->tqh_last = &(elm)->field.tqe_next; \ 509 #define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ 510 if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ 511 (elm)->field.tqe_next->field.tqe_prev = \ 512 &(elm)->field.tqe_next; \ 514 (head)->tqh_last = &(elm)->field.tqe_next; \ 515 (listelm)->field.tqe_next = (elm); \ 516 (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ 519 #define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ 520 (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ 521 (elm)->field.tqe_next = (listelm); \ 522 *(listelm)->field.tqe_prev = (elm); \ 523 (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ 526 #define TAILQ_REMOVE(head, elm, field) do { \ 527 if (((elm)->field.tqe_next) != NULL) \ 528 (elm)->field.tqe_next->field.tqe_prev = \ 529 (elm)->field.tqe_prev; \ 531 (head)->tqh_last = (elm)->field.tqe_prev; \ 532 *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ 533 _Q_INVALIDATE((elm)->field.tqe_prev); \ 534 _Q_INVALIDATE((elm)->field.tqe_next); \ 537 #define TAILQ_REPLACE(head, elm, elm2, field) do { \ 538 if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \ 539 (elm2)->field.tqe_next->field.tqe_prev = \ 540 &(elm2)->field.tqe_next; \ 542 (head)->tqh_last = &(elm2)->field.tqe_next; \ 543 (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ 544 *(elm2)->field.tqe_prev = (elm2); \ 545 _Q_INVALIDATE((elm)->field.tqe_prev); \ 546 _Q_INVALIDATE((elm)->field.tqe_next); \ 552 #define CIRCLEQ_HEAD(name, type) \ 554 struct type *cqh_first; \ 555 struct type *cqh_last; \ 558 #define CIRCLEQ_HEAD_INITIALIZER(head) \ 559 { CIRCLEQ_END(&head), CIRCLEQ_END(&head) } 561 #define CIRCLEQ_ENTRY(type) \ 563 struct type *cqe_next; \ 564 struct type *cqe_prev; \ 570 #define CIRCLEQ_FIRST(head) ((head)->cqh_first) 571 #define CIRCLEQ_LAST(head) ((head)->cqh_last) 572 #define CIRCLEQ_END(head) ((void *)(head)) 573 #define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) 574 #define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) 575 #define CIRCLEQ_EMPTY(head) \ 576 (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head)) 578 #define CIRCLEQ_FOREACH(var, head, field) \ 579 for((var) = CIRCLEQ_FIRST(head); \ 580 (var) != CIRCLEQ_END(head); \ 581 (var) = CIRCLEQ_NEXT(var, field)) 583 #define CIRCLEQ_FOREACH_SAFE(var, head, field, tvar) \ 584 for ((var) = CIRCLEQ_FIRST(head); \ 585 (var) != CIRCLEQ_END(head) && \ 586 ((tvar) = CIRCLEQ_NEXT(var, field), 1); \ 589 #define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ 590 for((var) = CIRCLEQ_LAST(head); \ 591 (var) != CIRCLEQ_END(head); \ 592 (var) = CIRCLEQ_PREV(var, field)) 594 #define CIRCLEQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ 595 for ((var) = CIRCLEQ_LAST(head, headname); \ 596 (var) != CIRCLEQ_END(head) && \ 597 ((tvar) = CIRCLEQ_PREV(var, headname, field), 1); \ 603 #define CIRCLEQ_INIT(head) do { \ 604 (head)->cqh_first = CIRCLEQ_END(head); \ 605 (head)->cqh_last = CIRCLEQ_END(head); \ 608 #define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 609 (elm)->field.cqe_next = (listelm)->field.cqe_next; \ 610 (elm)->field.cqe_prev = (listelm); \ 611 if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \ 612 (head)->cqh_last = (elm); \ 614 (listelm)->field.cqe_next->field.cqe_prev = (elm); \ 615 (listelm)->field.cqe_next = (elm); \ 618 #define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ 619 (elm)->field.cqe_next = (listelm); \ 620 (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ 621 if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \ 622 (head)->cqh_first = (elm); \ 624 (listelm)->field.cqe_prev->field.cqe_next = (elm); \ 625 (listelm)->field.cqe_prev = (elm); \ 628 #define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ 629 (elm)->field.cqe_next = (head)->cqh_first; \ 630 (elm)->field.cqe_prev = CIRCLEQ_END(head); \ 631 if ((head)->cqh_last == CIRCLEQ_END(head)) \ 632 (head)->cqh_last = (elm); \ 634 (head)->cqh_first->field.cqe_prev = (elm); \ 635 (head)->cqh_first = (elm); \ 638 #define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ 639 (elm)->field.cqe_next = CIRCLEQ_END(head); \ 640 (elm)->field.cqe_prev = (head)->cqh_last; \ 641 if ((head)->cqh_first == CIRCLEQ_END(head)) \ 642 (head)->cqh_first = (elm); \ 644 (head)->cqh_last->field.cqe_next = (elm); \ 645 (head)->cqh_last = (elm); \ 648 #define CIRCLEQ_REMOVE(head, elm, field) do { \ 649 if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \ 650 (head)->cqh_last = (elm)->field.cqe_prev; \ 652 (elm)->field.cqe_next->field.cqe_prev = \ 653 (elm)->field.cqe_prev; \ 654 if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \ 655 (head)->cqh_first = (elm)->field.cqe_next; \ 657 (elm)->field.cqe_prev->field.cqe_next = \ 658 (elm)->field.cqe_next; \ 659 _Q_INVALIDATE((elm)->field.cqe_prev); \ 660 _Q_INVALIDATE((elm)->field.cqe_next); \ 663 #define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \ 664 if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \ 666 (head)->cqh_last = (elm2); \ 668 (elm2)->field.cqe_next->field.cqe_prev = (elm2); \ 669 if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \ 671 (head)->cqh_first = (elm2); \ 673 (elm2)->field.cqe_prev->field.cqe_next = (elm2); \ 674 _Q_INVALIDATE((elm)->field.cqe_prev); \ 675 _Q_INVALIDATE((elm)->field.cqe_next); \ 716 #define PCG32_INITIALIZER { 0x853c49e6748fea9bULL, 0xda3e39cb94b95bdbULL } 744 #define UA_assert(ignore) assert(ignore) 749 #define container_of(ptr, type, member) \ 750 (type *)((uintptr_t)ptr - offsetof(type,member)) 758 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 759 # define UA_THREAD_LOCAL _Thread_local 760 #elif defined(__GNUC__) 761 # define UA_THREAD_LOCAL __thread 762 #elif defined(_MSC_VER) 763 # define UA_THREAD_LOCAL __declspec(thread) 765 # warning The compiler does not support thread-local variables 766 # define UA_THREAD_LOCAL 788 #ifndef UA_ENABLE_MULTITHREADING 789 # define UA_atomic_sync() 792 # define UA_atomic_sync() _ReadWriteBarrier() 794 # define UA_atomic_sync() __sync_synchronize() 799 UA_atomic_xchg(
void *
volatile * addr,
void *newptr) {
800 #ifndef UA_ENABLE_MULTITHREADING 806 return _InterlockedExchangePointer(addr, newptr);
808 return __sync_lock_test_and_set(addr, newptr);
814 UA_atomic_cmpxchg(
void *
volatile * addr,
void *expected,
void *newptr) {
815 #ifndef UA_ENABLE_MULTITHREADING 817 if(old == expected) {
823 return _InterlockedCompareExchangePointer(addr, expected, newptr);
825 return __sync_val_compare_and_swap(addr, expected, newptr);
831 UA_atomic_add(
volatile uint32_t *addr, uint32_t increase) {
832 #ifndef UA_ENABLE_MULTITHREADING 837 return _InterlockedExchangeAdd(addr, increase) + increase;
839 return __sync_add_and_fetch(addr, increase);
2518 #define UA_TRANSPORT_COUNT 12 2530 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEABORTBODY 0 2542 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEFOOTER 1 2557 #define UA_TRANSPORT_TCPHELLOMESSAGE 2 2568 #define UA_TRANSPORT_TCPERRORMESSAGE 3 2585 #define UA_TRANSPORT_MESSAGETYPE 4 2597 #define UA_TRANSPORT_ASYMMETRICALGORITHMSECURITYHEADER 5 2611 #define UA_TRANSPORT_TCPACKNOWLEDGEMESSAGE 6 2622 #define UA_TRANSPORT_SEQUENCEHEADER 7 2633 #define UA_TRANSPORT_TCPMESSAGEHEADER 8 2647 #define UA_TRANSPORT_CHUNKTYPE 9 2657 #define UA_TRANSPORT_SYMMETRICALGORITHMSECURITYHEADER 10 2668 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER 11 2686 #if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6 2687 # pragma GCC diagnostic push 2688 # pragma GCC diagnostic ignored "-Wmissing-field-initializers" 2689 # pragma GCC diagnostic ignored "-Wmissing-braces" 2700 UA_SecureConversationMessageAbortBody_new(
void) {
2726 UA_SecureConversationMessageFooter_new(
void) {
2752 UA_TcpHelloMessage_new(
void) {
2778 UA_TcpErrorMessage_new(
void) {
2804 UA_MessageType_new(
void) {
2829 UA_AsymmetricAlgorithmSecurityHeader_new(
void) {
2855 UA_TcpAcknowledgeMessage_new(
void) {
2880 UA_SequenceHeader_new(
void) {
2905 UA_TcpMessageHeader_new(
void) {
2930 UA_ChunkType_new(
void) {
2955 UA_SymmetricAlgorithmSecurityHeader_new(
void) {
2980 UA_SecureConversationMessageHeader_new(
void) {
2998 #if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6 2999 # pragma GCC diagnostic pop 3195 const char ** port,
const char ** path);
3257 const void *content,
const UA_DataType *contentType);
3276 #define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3277 UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3278 ((CHANNEL)->connection ? CHANNEL->connection->sockfd : 0), \ 3279 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3281 #define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3282 UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3283 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3284 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3286 #define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3287 UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3288 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3289 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3291 #define UA_LOG_WARNING_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3292 UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3293 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3294 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3296 #define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3297 UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3298 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3299 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3301 #define UA_LOG_FATAL_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3302 UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3303 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3304 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3356 #define UA_NODE_BASEATTRIBUTES \ 3358 UA_NodeClass nodeClass; \ 3359 UA_QualifiedName browseName; \ 3360 UA_LocalizedText displayName; \ 3361 UA_LocalizedText description; \ 3362 UA_UInt32 writeMask; \ 3363 UA_UInt32 userWriteMask; \ 3364 size_t referencesSize; \ 3365 UA_ReferenceNode *references; 3443 #define UA_NODE_VARIABLEATTRIBUTES \ 3445 UA_NodeId dataType; \ 3446 UA_Int32 valueRank; \ 3447 size_t arrayDimensionsSize; \ 3448 UA_UInt32 *arrayDimensions; \ 3451 UA_ValueSource valueSource; \ 3454 UA_DataValue value; \ 3455 UA_ValueCallback callback; \ 3457 UA_DataSource dataSource; \ 3704 #define UA_MAXCONTINUATIONPOINTS 5 3717 #ifdef UA_ENABLE_SUBSCRIPTIONS 3718 typedef struct UA_PublishResponseEntry {
3722 } UA_PublishResponseEntry;
3738 #ifdef UA_ENABLE_SUBSCRIPTIONS 3741 SIMPLEQ_HEAD(UA_ListOfQueuedPublishResponses, UA_PublishResponseEntry) responseQueue;
3755 #ifdef UA_ENABLE_SUBSCRIPTIONS 3766 UA_Session_getUniqueSubscriptionID(
UA_Session *session);
3773 #define UA_LOG_TRACE_SESSION(LOGGER, SESSION, MSG, ...) \ 3774 UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3775 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3776 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3777 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3780 #define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, MSG, ...) \ 3781 UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3782 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3783 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3784 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3787 #define UA_LOG_INFO_SESSION(LOGGER, SESSION, MSG, ...) \ 3788 UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3789 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3790 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3791 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3794 #define UA_LOG_WARNING_SESSION(LOGGER, SESSION, MSG, ...) \ 3795 UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3796 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3797 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3798 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3801 #define UA_LOG_ERROR_SESSION(LOGGER, SESSION, MSG, ...) \ 3802 UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3803 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3804 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3805 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3808 #define UA_LOG_FATAL_SESSION(LOGGER, SESSION, MSG, ...) \ 3809 UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3810 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3811 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3812 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3907 UA_SubscriptionState
state;
3987 #define UA_NodeStore_newObjectNode() \ 3988 (UA_ObjectNode*)UA_NodeStore_newNode(UA_NODECLASS_OBJECT) 3989 #define UA_NodeStore_newMethodNode() \ 3990 (UA_MethodNode*)UA_NodeStore_newNode(UA_NODECLASS_METHOD) 3991 #define UA_NodeStore_newObjectTypeNode() \ 3992 (UA_ObjectTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_OBJECTTYPE) 3993 #define UA_NodeStore_newVariableTypeNode() \ 3994 (UA_VariableTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_VARIABLETYPE) 3995 #define UA_NodeStore_newReferenceTypeNode() \ 3996 (UA_ReferenceTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_REFERENCETYPE) 3997 #define UA_NodeStore_newDataTypeNode() \ 3998 (UA_DataTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_DATATYPE) 3999 #define UA_NodeStore_newViewNode() \ 4000 (UA_ViewNode*)UA_NodeStore_newNode(UA_NODECLASS_VIEW) 4005 UA_NodeStore_newVariableNode(
void) {
4155 #define ANONYMOUS_POLICY "open62541-anonymous-policy" 4156 #define USERNAME_POLICY "open62541-username-policy" 4163 #ifdef UA_ENABLE_MULTITHREADING 4164 # define _LGPL_SOURCE 4166 # include <urcu/lfstack.h> 4168 # define UA_RCU_LOCK() rcu_read_lock() 4169 # define UA_RCU_UNLOCK() rcu_read_unlock() 4170 # define UA_ASSERT_RCU_LOCKED() 4171 # define UA_ASSERT_RCU_UNLOCKED() 4174 # define UA_ASSERT_RCU_LOCKED() assert(rcu_locked) 4175 # define UA_ASSERT_RCU_UNLOCKED() assert(!rcu_locked) 4176 # define UA_RCU_LOCK() do { \ 4177 UA_ASSERT_RCU_UNLOCKED(); \ 4178 rcu_locked = true; \ 4179 rcu_read_lock(); } while(0) 4180 # define UA_RCU_UNLOCK() do { \ 4181 UA_ASSERT_RCU_LOCKED(); \ 4182 rcu_locked = false; \ 4183 rcu_read_unlock(); } while(0) 4186 # define UA_RCU_LOCK() 4187 # define UA_RCU_UNLOCK() 4188 # define UA_ASSERT_RCU_LOCKED() 4189 # define UA_ASSERT_RCU_UNLOCKED() 4193 #ifdef UA_ENABLE_MULTITHREADING 4199 char padding[64 -
sizeof(
void*) -
sizeof(pthread_t) -
4204 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 4229 #ifndef UA_ENABLE_MULTITHREADING 4233 struct cds_wfcq_head dispatchQueue_head;
4235 struct cds_lfs_stack mainLoopJobs;
4237 struct DelayedJobs *delayedJobs;
4238 pthread_cond_t dispatchQueue_condition;
4239 pthread_mutex_t dispatchQueue_mutex;
4240 struct cds_wfcq_tail dispatchQueue_tail;
4280 UA_InstantiationCallback *instantiationCallback,
4307 UA_NodeId **typeHierarchy,
size_t *typeHierarchySize);
4313 size_t referenceTypeIdsSize);
4316 getNodeType(UA_Server *server,
const UA_Node *node);
4327 UA_Int32 targetValueRank,
size_t targetArrayDimensionsSize,
4337 const UA_UInt32 *constraintArrayDimensions,
4338 size_t testArrayDimensionsSize,
4404 const void *request,
void *response);
4458 UA_Session *session,
4559 void Service_Read(UA_Server *server, UA_Session *session,
4586 void Service_Call(UA_Server *server, UA_Session *session,
4686 #ifdef UA_ENABLE_SUBSCRIPTIONS 4688 typedef struct UA_Client_NotificationsAckNumber {
4689 LIST_ENTRY(UA_Client_NotificationsAckNumber) listEntry;
4691 } UA_Client_NotificationsAckNumber;
4693 typedef struct UA_Client_MonitoredItem {
4694 LIST_ENTRY(UA_Client_MonitoredItem) listEntry;
4704 void *handlerContext;
4705 } UA_Client_MonitoredItem;
4707 typedef struct UA_Client_Subscription {
4708 LIST_ENTRY(UA_Client_Subscription) listEntry;
4715 LIST_HEAD(UA_ListOfClientMonitoredItems, UA_Client_MonitoredItem) monitoredItems;
4716 } UA_Client_Subscription;
4718 void UA_Client_Subscriptions_forceDelete(
UA_Client *client, UA_Client_Subscription *sub);
4756 #ifdef UA_ENABLE_SUBSCRIPTIONS 4758 LIST_HEAD(ListOfUnacknowledgedNotifications, UA_Client_NotificationsAckNumber) pendingNotificationsAcks;
4759 LIST_HEAD(ListOfClientSubscriptionItems, UA_Client_Subscription) subscriptions;
4818 static void deleteMembers_noInit(
void *p,
const UA_DataType *type);
4824 size_t length = strlen(src);
4832 memcpy(str.
data, src, length);
4843 return (is == 0) ? true :
false;
4861 time_t secSinceUnixEpoch =
4864 memset(&ts, 0,
sizeof(
struct tm));
4872 return dateTimeStruct;
4877 for(
size_t i = digits; i > 0; --i) {
4878 pos[i-1] = (
UA_Byte)((n % 10) +
'0');
4893 printNumber(tSt.
day, &str.
data[3], 2);
4895 printNumber(tSt.
year, &str.
data[6], 4);
4897 printNumber(tSt.
hour, &str.
data[11], 2);
4899 printNumber(tSt.
min, &str.
data[14], 2);
4901 printNumber(tSt.
sec, &str.
data[17], 2);
4914 if(memcmp(g1, g2,
sizeof(
UA_Guid)) == 0)
4942 UA_ByteString_init(bs);
5040 #define FNV_PRIME_32 16777619 5043 for(
size_t i = 0; i < size; ++i) {
5044 fnv = fnv ^ (buf[i]);
5067 NodeId_deleteMembers(&p->
nodeId, _);
5145 if(UA_Variant_isScalar(src))
5218 size_t *total,
size_t *block,
size_t *stride,
size_t *first) {
5220 #if(MAX_SIZE > 0xffffffff) 5229 size_t dims_count = 1;
5231 size_t elements = 1;
5234 for(
size_t i = 0; i < dims_count; ++i)
5235 elements *= dims[i];
5251 for(
size_t i = 0; i < dims_count; ++i) {
5260 realmax[i] = dims[i] - 1;
5271 size_t running_dimssize = 1;
5273 for(
size_t k = dims_count; k > 0;) {
5276 if(!found_contiguous && dimrange != dims[k]) {
5278 found_contiguous =
true;
5279 *block = running_dimssize * dimrange;
5280 *stride = running_dimssize * dims[k];
5283 running_dimssize *= dims[k];
5309 length = dim->
max - dim->
min + 1;
5324 UA_Boolean isScalar = UA_Variant_isScalar(src);
5356 size_t count, block, stride, first;
5357 UA_StatusCode retval = computeStrides(src, thisrange, &count,
5358 &block, &stride, &first);
5363 UA_Variant_init(dst);
5369 size_t block_count = count / block;
5371 uintptr_t nextdst = (uintptr_t)dst->
data;
5372 uintptr_t nextsrc = (uintptr_t)src->
data + (elem_size * first);
5376 for(
size_t i = 0; i < block_count; ++i) {
5377 memcpy((
void*)nextdst, (
void*)nextsrc, elem_size * block);
5378 nextdst += block * elem_size;
5379 nextsrc += stride * elem_size;
5382 for(
size_t i = 0; i < block_count; ++i) {
5383 for(
size_t j = 0; j < block; ++j) {
5384 retval =
UA_copy((
const void*)nextsrc,
5385 (
void*)nextdst, src->
type);
5386 nextdst += elem_size;
5387 nextsrc += elem_size;
5389 nextsrc += (stride - block) * elem_size;
5403 for(
size_t i = 0; i < block_count; ++i) {
5406 retval = copySubString((
const UA_String*)nextsrc,
5413 nextdst += elem_size;
5414 nextsrc += elem_size;
5416 nextsrc += (stride - block) * elem_size;
5438 Variant_deletemembers(dst,
NULL);
5452 Variant_setRange(
UA_Variant *v,
void *array,
size_t arraySize,
5455 size_t count, block, stride, first;
5457 &block, &stride, &first);
5460 if(count != arraySize)
5464 size_t block_count = count / block;
5466 uintptr_t nextdst = (uintptr_t)v->
data + (first * elem_size);
5467 uintptr_t nextsrc = (uintptr_t)array;
5469 for(
size_t i = 0; i < block_count; ++i) {
5470 memcpy((
void*)nextdst, (
void*)nextsrc, elem_size * block);
5471 nextsrc += block * elem_size;
5472 nextdst += stride * elem_size;
5475 for(
size_t i = 0; i < block_count; ++i) {
5476 for(
size_t j = 0; j < block; ++j) {
5477 deleteMembers_noInit((
void*)nextdst, v->
type);
5478 retval |=
UA_copy((
void*)nextsrc, (
void*)nextdst, v->
type);
5479 nextdst += elem_size;
5480 nextsrc += elem_size;
5482 nextdst += (stride - block) * elem_size;
5488 memset(array, 0,
sizeof(elem_size)*arraySize);
5496 return Variant_setRange(v, array, arraySize, range,
false);
5502 return Variant_setRange(v, (
void*)(uintptr_t)array,
5503 arraySize, range,
true);
5510 String_deleteMembers(&p->
text,
NULL);
5517 retval |= UA_String_copy(&src->
text, &dst->
text);
5531 UA_Variant_init(&dst->
value);
5534 DataValue_deleteMembers(dst,
NULL);
5644 copy_noInit(
const void *src,
void *dst,
const UA_DataType *type) {
5646 uintptr_t ptrs = (uintptr_t)src;
5647 uintptr_t ptrd = (uintptr_t)dst;
5649 for(
size_t i = 0; i < membersSize; ++i) {
5657 retval |= copyJumpTable[fi]((
const void*)ptrs, (
void*)ptrd, mt);
5663 size_t *dst_size = (
size_t*)ptrd;
5664 const size_t size = *((
const size_t*)ptrs);
5665 ptrs +=
sizeof(size_t);
5666 ptrd +=
sizeof(size_t);
5667 retval |=
UA_Array_copy(*(
void*
const*)ptrs, size, (
void**)ptrd, mt);
5672 ptrs +=
sizeof(
void*);
5673 ptrd +=
sizeof(
void*);
5681 memset(dst, 0, type->
memSize);
5688 static void nopDeleteMembers(
void *p,
const UA_DataType *type) { }
5723 deleteMembers_noInit(
void *p,
const UA_DataType *type) {
5724 uintptr_t ptr = (uintptr_t)p;
5726 for(
size_t i = 0; i < membersSize; ++i) {
5733 deleteMembersJumpTable[fi]((
void*)ptr, mt);
5737 size_t length = *(
size_t*)ptr;
5738 ptr +=
sizeof(size_t);
5740 ptr +=
sizeof(
void*);
5747 deleteMembers_noInit(p, type);
5753 deleteMembers_noInit(p, type);
5788 memcpy(*dst, src, type->
memSize * size);
5792 uintptr_t ptrs = (uintptr_t)src;
5793 uintptr_t ptrd = (uintptr_t)*dst;
5795 for(
size_t i = 0; i < size; ++i) {
5796 retval |=
UA_copy((
void*)ptrs, (
void*)ptrd, type);
5810 uintptr_t ptr = (uintptr_t)p;
5811 for(
size_t i = 0; i < size; ++i) {
5841 #if defined(__clang__) 5842 # pragma GCC diagnostic push 5843 # pragma GCC diagnostic warning "-W#warnings" 5846 #ifndef UA_BINARY_OVERLAYABLE_INTEGER 5847 # warning Integer endianness could not be detected to be little endian. Use slow generic encoding. 5852 #ifndef UA_BINARY_OVERLAYABLE_FLOAT 5853 # warning Float endianness could not be detected to be little endian in the IEEE 754 format. Use slow generic encoding. 5856 #if defined(__clang__) 5857 # pragma GCC diagnostic pop 5905 exchangeBuffer(
void) {
5906 if(!g_exchangeBufferCallback)
5911 void *store_exchangeBufferCallbackHandle = g_exchangeBufferCallbackHandle;
5913 size_t offset = (uintptr_t)(g_pos - g_buf.data);
5915 status ret = g_exchangeBufferCallback(g_exchangeBufferCallbackHandle, &buf, offset);
5918 g_exchangeBufferCallback = store_exchangeBufferCallback;
5919 g_exchangeBufferCallbackHandle = store_exchangeBufferCallbackHandle;
5930 #if !UA_BINARY_OVERLAYABLE_INTEGER 5934 UA_encode16(
const u16 v,
u8 buf[2]) {
5936 buf[1] = (
u8)(v >> 8);
5940 UA_decode16(
const u8 buf[2],
u16 *v) {
5941 *v = (
u16)((
u16)buf[0] + (((
u16)buf[1]) << 8));
5945 UA_encode32(
const u32 v,
u8 buf[4]) {
5947 buf[1] = (
u8)(v >> 8);
5948 buf[2] = (
u8)(v >> 16);
5949 buf[3] = (
u8)(v >> 24);
5953 UA_decode32(
const u8 buf[4],
u32 *v) {
5955 (((
u32)buf[1]) << 8) +
5956 (((
u32)buf[2]) << 16) +
5957 (((
u32)buf[3]) << 24));
5961 UA_encode64(
const u64 v,
u8 buf[8]) {
5963 buf[1] = (
u8)(v >> 8);
5964 buf[2] = (
u8)(v >> 16);
5965 buf[3] = (
u8)(v >> 24);
5966 buf[4] = (
u8)(v >> 32);
5967 buf[5] = (
u8)(v >> 40);
5968 buf[6] = (
u8)(v >> 48);
5969 buf[7] = (
u8)(v >> 56);
5973 UA_decode64(
const u8 buf[8],
u64 *v) {
5975 (((
u64)buf[1]) << 8) +
5976 (((
u64)buf[2]) << 16) +
5977 (((
u64)buf[3]) << 24) +
5978 (((
u64)buf[4]) << 32) +
5979 (((
u64)buf[5]) << 40) +
5980 (((
u64)buf[6]) << 48) +
5981 (((
u64)buf[7]) << 56));
5988 Boolean_encodeBinary(
const bool *src,
const UA_DataType *_) {
5989 if(g_pos +
sizeof(
bool) > g_end)
5991 *g_pos = *(
const u8*)src;
5997 Boolean_decodeBinary(
bool *dst,
const UA_DataType *_) {
5998 if(g_pos +
sizeof(
bool) > g_end)
6000 *dst = (*g_pos > 0) ?
true :
false;
6008 if(g_pos +
sizeof(
u8) > g_end)
6010 *g_pos = *(
const u8*)src;
6017 if(g_pos +
sizeof(
u8) > g_end)
6027 if(g_pos +
sizeof(
u16) > g_end)
6029 #if UA_BINARY_OVERLAYABLE_INTEGER 6030 memcpy(g_pos, src,
sizeof(
u16));
6032 UA_encode16(*src, g_pos);
6040 if(g_pos +
sizeof(
u16) > g_end)
6042 #if UA_BINARY_OVERLAYABLE_INTEGER 6043 memcpy(dst, g_pos,
sizeof(
u16));
6045 UA_decode16(g_pos, dst);
6054 if(g_pos +
sizeof(
u32) > g_end)
6056 #if UA_BINARY_OVERLAYABLE_INTEGER 6057 memcpy(g_pos, src,
sizeof(
u32));
6059 UA_encode32(*src, g_pos);
6066 Int32_encodeBinary(
i32 const *src) {
6067 return UInt32_encodeBinary((
const u32*)src,
NULL);
6072 if(g_pos +
sizeof(
u32) > g_end)
6074 #if UA_BINARY_OVERLAYABLE_INTEGER 6075 memcpy(dst, g_pos,
sizeof(
u32));
6077 UA_decode32(g_pos, dst);
6084 Int32_decodeBinary(
i32 *dst) {
6085 return UInt32_decodeBinary((
u32*)dst,
NULL);
6089 StatusCode_decodeBinary(
status *dst) {
6090 return UInt32_decodeBinary((
u32*)dst,
NULL);
6096 if(g_pos +
sizeof(
u64) > g_end)
6098 #if UA_BINARY_OVERLAYABLE_INTEGER 6099 memcpy(g_pos, src,
sizeof(
u64));
6101 UA_encode64(*src, g_pos);
6109 if(g_pos +
sizeof(
u64) > g_end)
6111 #if UA_BINARY_OVERLAYABLE_INTEGER 6112 memcpy(dst, g_pos,
sizeof(
u64));
6114 UA_decode64(g_pos, dst);
6122 return UInt64_decodeBinary((
u64*)dst,
NULL);
6129 #if UA_BINARY_OVERLAYABLE_FLOAT 6130 # define Float_encodeBinary UInt32_encodeBinary 6131 # define Float_decodeBinary UInt32_decodeBinary 6132 # define Double_encodeBinary UInt64_encodeBinary 6133 # define Double_decodeBinary UInt64_decodeBinary 6142 pack754(
long double f,
unsigned bits,
unsigned expbits) {
6143 unsigned significandbits = bits - expbits - 1;
6146 if (f < 0) { sign = 1; fnorm = -f; }
6147 else { sign = 0; fnorm = f; }
6149 while(fnorm >= 2.0) { fnorm /= 2.0; ++shift; }
6150 while(fnorm < 1.0) { fnorm *= 2.0; --shift; }
6151 fnorm = fnorm - 1.0;
6152 long long significand = (
long long)(fnorm * ((
float)(1LL<<significandbits) + 0.5f));
6153 long long exponent = shift + ((1<<(expbits-1)) - 1);
6154 return (uint64_t)((sign<<(bits-1)) | (exponent<<(bits-expbits-1)) | significand);
6158 unpack754(uint64_t i,
unsigned bits,
unsigned expbits) {
6159 unsigned significandbits = bits - expbits - 1;
6160 long double result = (
long double)(i&(uint64_t)((1LL<<significandbits)-1));
6161 result /= (1LL<<significandbits);
6163 unsigned bias = (unsigned)(1<<(expbits-1)) - 1;
6164 long long shift = (
long long)((i>>significandbits) & (uint64_t)((1LL<<expbits)-1)) - bias;
6165 while(shift > 0) { result *= 2.0; --shift; }
6166 while(shift < 0) { result /= 2.0; ++shift; }
6167 result *= ((i>>(bits-1))&1)? -1.0: 1.0;
6172 #define FLOAT_NAN 0xffc00000 6173 #define FLOAT_INF 0x7f800000 6174 #define FLOAT_NEG_INF 0xff800000 6175 #define FLOAT_NEG_ZERO 0x80000000 6186 else encoded = (
u32)pack754(f, 32, 8);
6187 return UInt32_encodeBinary(&encoded,
NULL);
6193 status ret = UInt32_decodeBinary(&decoded,
NULL);
6196 if(decoded == 0) *dst = 0.0f;
6198 else if(decoded ==
FLOAT_INF) *dst = INFINITY;
6200 else if((decoded >= 0x7f800001 && decoded <= 0x7fffffff) ||
6201 (decoded >= 0xff800001 && decoded <= 0xffffffff)) *dst = NAN;
6202 else *dst = (
UA_Float)unpack754(decoded, 32, 8);
6207 #define DOUBLE_NAN 0xfff8000000000000L 6208 #define DOUBLE_INF 0x7ff0000000000000L 6209 #define DOUBLE_NEG_INF 0xfff0000000000000L 6210 #define DOUBLE_NEG_ZERO 0x8000000000000000L 6221 else encoded = pack754(d, 64, 11);
6222 return UInt64_encodeBinary(&encoded,
NULL);
6228 status ret = UInt64_decodeBinary(&decoded,
NULL);
6231 if(decoded == 0) *dst = 0.0;
6233 else if(decoded ==
DOUBLE_INF) *dst = INFINITY;
6236 else if((decoded >= 0x7ff0000000000001L && decoded <= 0x7fffffffffffffffL) ||
6237 (decoded >= 0xfff0000000000001L && decoded <= 0xffffffffffffffffL)) *dst = NAN;
6238 else *dst = (
UA_Double)unpack754(decoded, 64, 11);
6247 encodeNumericWithExchangeBuffer(
const void *ptr,
6251 ret = exchangeBuffer();
6254 encodeFunc(ptr,
NULL);
6262 UA_encodeBinaryInternal(
const void *src,
const UA_DataType *type);
6269 Array_encodeBinaryOverlayable(uintptr_t ptr,
size_t length,
size_t elementMemSize) {
6271 size_t finished = 0;
6274 while(g_end < g_pos + (elementMemSize * (length-finished))) {
6275 size_t possible = ((uintptr_t)g_end - (uintptr_t)g_pos) / (
sizeof(
u8) * elementMemSize);
6276 size_t possibleMem = possible * elementMemSize;
6277 memcpy(g_pos, (
void*)ptr, possibleMem);
6278 g_pos += possibleMem;
6280 finished += possible;
6281 status ret = exchangeBuffer();
6287 memcpy(g_pos, (
void*)ptr, elementMemSize * (length-finished));
6288 g_pos += elementMemSize * (length-finished);
6293 Array_encodeBinaryComplex(uintptr_t ptr,
size_t length,
const UA_DataType *type) {
6300 for(
size_t i = 0; i < length; ++i) {
6302 status ret = encodeType((
const void*)ptr, type);
6308 ret = exchangeBuffer();
6321 Array_encodeBinary(
const void *src,
size_t length,
const UA_DataType *type) {
6323 i32 signed_length = -1;
6327 signed_length = (
i32)length;
6332 status ret = encodeNumericWithExchangeBuffer(&signed_length,
6341 return Array_encodeBinaryComplex((uintptr_t)src, length, type);
6342 return Array_encodeBinaryOverlayable((uintptr_t)src, length, type->
memSize);
6350 status ret = Int32_decodeBinary(&signed_length);
6355 if(signed_length <= 0) {
6357 if(signed_length < 0)
6367 size_t length = (size_t)signed_length;
6368 if(g_pos + ((type->
memSize * length) / 32) > g_end)
6378 if(g_end < g_pos + (type->
memSize * length)) {
6383 memcpy(*dst, g_pos, type->
memSize * length);
6384 g_pos += type->
memSize * length;
6387 uintptr_t ptr = (uintptr_t)*dst;
6389 for(
size_t i = 0; i < length; ++i) {
6390 ret = decodeBinaryJumpTable[decode_index]((
void*)ptr, type);
6400 *out_length = length;
6432 ret |= UInt16_encodeBinary(&src->
data2,
NULL);
6433 ret |= UInt16_encodeBinary(&src->
data3,
NULL);
6434 if(g_pos + (8*
sizeof(
u8)) > g_end)
6436 memcpy(g_pos, src->
data4, 8*
sizeof(
u8));
6444 ret |= UInt16_decodeBinary(&dst->
data2,
NULL);
6445 ret |= UInt16_decodeBinary(&dst->
data3,
NULL);
6446 if(g_pos + (8*
sizeof(
u8)) > g_end)
6448 memcpy(dst->
data4, g_pos, 8*
sizeof(
u8));
6454 #define UA_NODEIDTYPE_NUMERIC_TWOBYTE 0 6455 #define UA_NODEIDTYPE_NUMERIC_FOURBYTE 1 6456 #define UA_NODEIDTYPE_NUMERIC_COMPLETE 2 6458 #define UA_EXPANDEDNODEID_SERVERINDEX_FLAG 0x40 6459 #define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG 0x80 6465 NodeId_encodeBinaryWithEncodingMask(
UA_NodeId const *src,
u8 encoding) {
6471 ret |= Byte_encodeBinary(&encoding,
NULL);
6476 ret |= Byte_encodeBinary(&encoding,
NULL);
6478 ret |= Byte_encodeBinary(&nsindex,
NULL);
6480 ret |= UInt16_encodeBinary(&identifier16,
NULL);
6483 ret |= Byte_encodeBinary(&encoding,
NULL);
6485 ret |= Byte_encodeBinary(&identifier8,
NULL);
6490 ret |= Byte_encodeBinary(&encoding,
NULL);
6498 ret |= Byte_encodeBinary(&encoding,
NULL);
6504 ret |= Byte_encodeBinary(&encoding,
NULL);
6518 return NodeId_encodeBinaryWithEncodingMask(src, 0);
6523 u8 dstByte = 0, encodingByte = 0;
6527 status ret = Byte_decodeBinary(&encodingByte,
NULL);
6536 switch (encodingByte) {
6539 ret = Byte_decodeBinary(&dstByte,
NULL);
6545 ret |= Byte_decodeBinary(&dstByte,
NULL);
6547 ret |= UInt16_decodeBinary(&dstUInt16,
NULL);
6588 status ret = NodeId_encodeBinaryWithEncodingMask(&src->
nodeId, encoding);
6603 ret = encodeNumericWithExchangeBuffer(&src->
serverIndex,
6614 u8 encoding = *g_pos;
6632 #define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE 0x01 6633 #define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT 0x02 6645 status ret = Byte_encodeBinary(&encoding,
NULL);
6651 ret |= String_encodeBinary(&src->
locale,
NULL);
6653 ret |= String_encodeBinary(&src->
text,
NULL);
6662 status ret = Byte_decodeBinary(&encoding,
NULL);
6666 ret |= String_decodeBinary(&dst->
locale,
NULL);
6668 ret |= String_decodeBinary(&dst->
text,
NULL);
6675 UA_findDataTypeByBinary(
const UA_NodeId *typeId) {
6700 ret = encodeNumericWithExchangeBuffer(&encoding,
6727 status ret = NodeId_encodeBinary(&typeId,
NULL);
6731 ret |= Byte_encodeBinary(&encoding,
NULL);
6740 i32 signed_len = (
i32)len;
6741 ret |= Int32_encodeBinary(&signed_len);
6754 const UA_DataType *type = UA_findDataTypeByBinary(typeId);
6775 return decodeBinaryJumpTable[decode_index](dst->
content.
decoded.data, type);
6786 UA_NodeId_init(&binTypeId);
6787 status ret = NodeId_decodeBinary(&binTypeId,
NULL);
6788 ret |= Byte_decodeBinary(&encoding,
NULL);
6790 UA_NodeId_deleteMembers(&binTypeId);
6795 ret = ExtensionObject_decodeBinaryContent(dst, &binTypeId);
6796 UA_NodeId_deleteMembers(&binTypeId);
6808 UA_NodeId_deleteMembers(&binTypeId);
6819 Variant_encodeBinaryWrapExtensionObject(
const UA_Variant *src,
const bool isArray) {
6830 ret = Int32_encodeBinary(&encodedLength);
6837 UA_ExtensionObject_init(&eo);
6841 uintptr_t ptr = (uintptr_t)src->
data;
6863 return Byte_encodeBinary(&encoding,
NULL);
6882 status ret = Byte_encodeBinary(&encoding,
NULL);
6888 ret = Variant_encodeBinaryWrapExtensionObject(src, isArray);
6890 ret = UA_encodeBinaryInternal(src->
data, src->
type);
6902 Variant_decodeBinaryUnwrapExtensionObject(
UA_Variant *dst) {
6905 u8 *old_pos = g_pos;
6909 UA_NodeId_init(&typeId);
6910 status ret = NodeId_decodeBinary(&typeId,
NULL);
6916 ret = Byte_decodeBinary(&encoding,
NULL);
6918 UA_NodeId_deleteMembers(&typeId);
6924 (dst->
type = UA_findDataTypeByBinary(&typeId)) !=
NULL) {
6931 UA_NodeId_deleteMembers(&typeId);
6941 return decodeBinaryJumpTable[decode_index](dst->
data, dst->
type);
6949 status ret = Byte_decodeBinary(&encodingByte,
NULL);
6954 if(encodingByte == 0)
6976 ret = decodeBinaryJumpTable[typeIndex](dst->
data, dst->
type);
6978 ret = Variant_decodeBinaryUnwrapExtensionObject(dst);
6992 u8 encodingMask = (
u8)
7001 status ret = Byte_encodeBinary(&encodingMask,
NULL);
7009 ret = Variant_encodeBinary(&src->
value,
NULL);
7015 ret |= encodeNumericWithExchangeBuffer(&src->
status,
7033 #define MAX_PICO_SECONDS 9999 7039 status ret = Byte_decodeBinary(&encodingMask,
NULL);
7044 if(encodingMask & 0x01) {
7046 ret |= Variant_decodeBinary(&dst->
value,
NULL);
7048 if(encodingMask & 0x02) {
7050 ret |= StatusCode_decodeBinary(&dst->
status);
7052 if(encodingMask & 0x04) {
7056 if(encodingMask & 0x10) {
7062 if(encodingMask & 0x08) {
7066 if(encodingMask & 0x20) {
7079 u8 encodingMask = (
u8)
7085 status ret = Byte_encodeBinary(&encodingMask,
NULL);
7093 ret |= Int32_encodeBinary(&src->
locale);
7129 status ret = Byte_decodeBinary(&encodingMask,
NULL);
7134 if(encodingMask & 0x01) {
7138 if(encodingMask & 0x02) {
7142 if(encodingMask & 0x04) {
7146 if(encodingMask & 0x08) {
7148 ret |= Int32_decodeBinary(&dst->
locale);
7150 if(encodingMask & 0x10) {
7154 if(encodingMask & 0x20) {
7158 if(encodingMask & 0x40) {
7175 UA_decodeBinaryInternal(
void *dst,
const UA_DataType *type);
7207 UA_encodeBinaryInternal(
const void *src,
const UA_DataType *type) {
7208 uintptr_t ptr = (uintptr_t)src;
7218 size_t memSize = membertype->
memSize;
7220 ret = encodeBinaryJumpTable[encode_index]((
const void*)ptr, membertype);
7224 ret = exchangeBuffer();
7225 ptr -= member->
padding + memSize;
7234 const size_t length = *((
const size_t*)ptr);
7235 ptr +=
sizeof(size_t);
7236 ret = Array_encodeBinary(*(
void *
UA_RESTRICT const *)ptr, length, membertype);
7237 ptr +=
sizeof(
void*);
7250 g_pos = &dst->
data[*offset];
7252 g_exchangeBufferCallback = exchangeCallback;
7253 g_exchangeBufferCallbackHandle = exchangeHandle;
7254 status ret = UA_encodeBinaryInternal(src, type);
7259 *offset = (uintptr_t)(g_pos - g_buf.data);
7293 UA_decodeBinaryInternal(
void *dst,
const UA_DataType *type) {
7294 uintptr_t ptr = (uintptr_t)dst;
7304 size_t memSize = membertype->
memSize;
7305 ret |= decodeBinaryJumpTable[fi]((
void *
UA_RESTRICT)ptr, membertype);
7309 size_t *length = (
size_t*)ptr;
7310 ptr +=
sizeof(size_t);
7312 ptr +=
sizeof(
void*);
7322 memset(dst, 0, type->
memSize);
7326 g_pos = &src->
data[*offset];
7330 status ret = UA_decodeBinaryInternal(dst, type);
7334 *offset = (size_t)(g_pos - src->
data) /
sizeof(
u8);
7345 Array_calcSizeBinary(
const void *src,
size_t length,
const UA_DataType *type) {
7351 uintptr_t ptr = (uintptr_t)src;
7353 for(
size_t i = 0; i < length; ++i) {
7354 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, type);
7367 return 4 + p->length;
7378 switch (src->identifierType) {
7382 }
else if(src->identifier.numeric >
UA_BYTE_MAX || src->namespaceIndex > 0) {
7391 s += String_calcSizeBinary(&src->identifier.string,
NULL);
7404 size_t s = NodeId_calcSizeBinary(&src->
nodeId,
NULL);
7416 s += String_calcSizeBinary(&src->
locale,
NULL);
7418 s += String_calcSizeBinary(&src->
text,
NULL);
7434 s += calcSizeBinaryJumpTable[encode_index](src->
content.
decoded.data, type);
7462 UA_NodeId_init(&typeId);
7477 uintptr_t ptr = (uintptr_t)src->
data;
7479 for(
size_t i = 0; i < length; ++i) {
7482 s += NodeId_calcSizeBinary(&typeId,
NULL);
7485 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, src->
type);
7499 s += Variant_calcSizeBinary(&src->
value,
NULL);
7565 uintptr_t ptr = (uintptr_t)p;
7568 for(
size_t i = 0; i < membersSize; ++i) {
7574 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, membertype);
7578 const size_t length = *((
const size_t*)ptr);
7579 ptr +=
sizeof(size_t);
7580 s += Array_calcSizeBinary(*(
void *
UA_RESTRICT const *)ptr, length, membertype);
7581 ptr +=
sizeof(
void*);
7596 #ifdef UA_ENABLE_TYPENAMES 7599 .namespaceZero =
true,
7607 #ifdef UA_ENABLE_TYPENAMES 7610 .namespaceZero =
true,
7618 #ifdef UA_ENABLE_TYPENAMES 7621 .namespaceZero =
true,
7629 #ifdef UA_ENABLE_TYPENAMES 7632 .namespaceZero =
true,
7640 #ifdef UA_ENABLE_TYPENAMES 7643 .namespaceZero =
true,
7651 #ifdef UA_ENABLE_TYPENAMES 7654 .namespaceZero =
true,
7662 #ifdef UA_ENABLE_TYPENAMES 7665 .namespaceZero =
true,
7673 #ifdef UA_ENABLE_TYPENAMES 7676 .namespaceZero =
true,
7684 #ifdef UA_ENABLE_TYPENAMES 7687 .namespaceZero =
true,
7695 #ifdef UA_ENABLE_TYPENAMES 7698 .namespaceZero =
true,
7706 #ifdef UA_ENABLE_TYPENAMES 7709 .namespaceZero =
true,
7717 #ifdef UA_ENABLE_TYPENAMES 7720 .namespaceZero =
true,
7728 #ifdef UA_ENABLE_TYPENAMES 7731 .namespaceZero =
true,
7739 #ifdef UA_ENABLE_TYPENAMES 7742 .namespaceZero =
true,
7750 #ifdef UA_ENABLE_TYPENAMES 7753 .namespaceZero =
true,
7761 #ifdef UA_ENABLE_TYPENAMES 7764 .namespaceZero =
true,
7772 #ifdef UA_ENABLE_TYPENAMES 7775 .namespaceZero =
true,
7783 #ifdef UA_ENABLE_TYPENAMES 7786 .namespaceZero =
true,
7794 #ifdef UA_ENABLE_TYPENAMES 7797 .namespaceZero =
true,
7805 #ifdef UA_ENABLE_TYPENAMES 7806 .memberName =
"namespaceIndex",
7808 .namespaceZero =
true,
7813 #ifdef UA_ENABLE_TYPENAMES 7814 .memberName =
"name",
7816 .namespaceZero =
true,
7824 #ifdef UA_ENABLE_TYPENAMES 7827 .namespaceZero =
true,
7835 #ifdef UA_ENABLE_TYPENAMES 7838 .namespaceZero =
true,
7846 #ifdef UA_ENABLE_TYPENAMES 7849 .namespaceZero =
true,
7857 #ifdef UA_ENABLE_TYPENAMES 7860 .namespaceZero =
true,
7868 #ifdef UA_ENABLE_TYPENAMES 7871 .namespaceZero =
true,
7879 #ifdef UA_ENABLE_TYPENAMES 7880 .memberName =
"certificateData",
7882 .namespaceZero =
true,
7887 #ifdef UA_ENABLE_TYPENAMES 7888 .memberName =
"signature",
7890 .namespaceZero =
true,
7898 #ifdef UA_ENABLE_TYPENAMES 7899 .memberName =
"targetId",
7901 .namespaceZero =
true,
7906 #ifdef UA_ENABLE_TYPENAMES 7907 .memberName =
"remainingPathIndex",
7909 .namespaceZero =
true,
7917 #ifdef UA_ENABLE_TYPENAMES 7918 .memberName =
"specifiedAttributes",
7920 .namespaceZero =
true,
7925 #ifdef UA_ENABLE_TYPENAMES 7926 .memberName =
"displayName",
7928 .namespaceZero =
true,
7933 #ifdef UA_ENABLE_TYPENAMES 7934 .memberName =
"description",
7936 .namespaceZero =
true,
7941 #ifdef UA_ENABLE_TYPENAMES 7942 .memberName =
"writeMask",
7944 .namespaceZero =
true,
7949 #ifdef UA_ENABLE_TYPENAMES 7950 .memberName =
"userWriteMask",
7952 .namespaceZero =
true,
7957 #ifdef UA_ENABLE_TYPENAMES 7958 .memberName =
"containsNoLoops",
7960 .namespaceZero =
true,
7965 #ifdef UA_ENABLE_TYPENAMES 7966 .memberName =
"eventNotifier",
7968 .namespaceZero =
true,
7976 #ifdef UA_ENABLE_TYPENAMES 7979 .namespaceZero =
true,
7987 #ifdef UA_ENABLE_TYPENAMES 7988 .memberName =
"authenticationToken",
7990 .namespaceZero =
true,
7995 #ifdef UA_ENABLE_TYPENAMES 7996 .memberName =
"timestamp",
7998 .namespaceZero =
true,
8003 #ifdef UA_ENABLE_TYPENAMES 8004 .memberName =
"requestHandle",
8006 .namespaceZero =
true,
8011 #ifdef UA_ENABLE_TYPENAMES 8012 .memberName =
"returnDiagnostics",
8014 .namespaceZero =
true,
8019 #ifdef UA_ENABLE_TYPENAMES 8020 .memberName =
"auditEntryId",
8022 .namespaceZero =
true,
8027 #ifdef UA_ENABLE_TYPENAMES 8028 .memberName =
"timeoutHint",
8030 .namespaceZero =
true,
8035 #ifdef UA_ENABLE_TYPENAMES 8036 .memberName =
"additionalHeader",
8038 .namespaceZero =
true,
8046 #ifdef UA_ENABLE_TYPENAMES 8047 .memberName =
"statusCode",
8049 .namespaceZero =
true,
8054 #ifdef UA_ENABLE_TYPENAMES 8055 .memberName =
"revisedSamplingInterval",
8057 .namespaceZero =
true,
8062 #ifdef UA_ENABLE_TYPENAMES 8063 .memberName =
"revisedQueueSize",
8065 .namespaceZero =
true,
8070 #ifdef UA_ENABLE_TYPENAMES 8071 .memberName =
"filterResult",
8073 .namespaceZero =
true,
8081 #ifdef UA_ENABLE_TYPENAMES 8082 .memberName =
"requestHeader",
8084 .namespaceZero =
true,
8092 #ifdef UA_ENABLE_TYPENAMES 8093 .memberName =
"statusCode",
8095 .namespaceZero =
true,
8100 #ifdef UA_ENABLE_TYPENAMES 8101 .memberName =
"addedNodeId",
8103 .namespaceZero =
true,
8111 #ifdef UA_ENABLE_TYPENAMES 8112 .memberName =
"specifiedAttributes",
8114 .namespaceZero =
true,
8119 #ifdef UA_ENABLE_TYPENAMES 8120 .memberName =
"displayName",
8122 .namespaceZero =
true,
8127 #ifdef UA_ENABLE_TYPENAMES 8128 .memberName =
"description",
8130 .namespaceZero =
true,
8135 #ifdef UA_ENABLE_TYPENAMES 8136 .memberName =
"writeMask",
8138 .namespaceZero =
true,
8143 #ifdef UA_ENABLE_TYPENAMES 8144 .memberName =
"userWriteMask",
8146 .namespaceZero =
true,
8151 #ifdef UA_ENABLE_TYPENAMES 8152 .memberName =
"value",
8154 .namespaceZero =
true,
8159 #ifdef UA_ENABLE_TYPENAMES 8160 .memberName =
"dataType",
8162 .namespaceZero =
true,
8167 #ifdef UA_ENABLE_TYPENAMES 8168 .memberName =
"valueRank",
8170 .namespaceZero =
true,
8175 #ifdef UA_ENABLE_TYPENAMES 8176 .memberName =
"arrayDimensions",
8178 .namespaceZero =
true,
8183 #ifdef UA_ENABLE_TYPENAMES 8184 .memberName =
"accessLevel",
8186 .namespaceZero =
true,
8191 #ifdef UA_ENABLE_TYPENAMES 8192 .memberName =
"userAccessLevel",
8194 .namespaceZero =
true,
8199 #ifdef UA_ENABLE_TYPENAMES 8200 .memberName =
"minimumSamplingInterval",
8202 .namespaceZero =
true,
8207 #ifdef UA_ENABLE_TYPENAMES 8208 .memberName =
"historizing",
8210 .namespaceZero =
true,
8218 #ifdef UA_ENABLE_TYPENAMES 8219 .memberName =
"sequenceNumber",
8221 .namespaceZero =
true,
8226 #ifdef UA_ENABLE_TYPENAMES 8227 .memberName =
"publishTime",
8229 .namespaceZero =
true,
8234 #ifdef UA_ENABLE_TYPENAMES 8235 .memberName =
"notificationData",
8237 .namespaceZero =
true,
8245 #ifdef UA_ENABLE_TYPENAMES 8248 .namespaceZero =
true,
8256 #ifdef UA_ENABLE_TYPENAMES 8259 .namespaceZero =
true,
8267 #ifdef UA_ENABLE_TYPENAMES 8268 .memberName =
"statusCode",
8270 .namespaceZero =
true,
8275 #ifdef UA_ENABLE_TYPENAMES 8276 .memberName =
"inputArgumentResults",
8278 .namespaceZero =
true,
8283 #ifdef UA_ENABLE_TYPENAMES 8284 .memberName =
"inputArgumentDiagnosticInfos",
8286 .namespaceZero =
true,
8291 #ifdef UA_ENABLE_TYPENAMES 8292 .memberName =
"outputArguments",
8294 .namespaceZero =
true,
8302 #ifdef UA_ENABLE_TYPENAMES 8303 .memberName =
"statusCode",
8305 .namespaceZero =
true,
8310 #ifdef UA_ENABLE_TYPENAMES 8311 .memberName =
"dataStatusCodes",
8313 .namespaceZero =
true,
8318 #ifdef UA_ENABLE_TYPENAMES 8319 .memberName =
"dataDiagnosticInfos",
8321 .namespaceZero =
true,
8329 #ifdef UA_ENABLE_TYPENAMES 8330 .memberName =
"referenceTypeId",
8332 .namespaceZero =
true,
8337 #ifdef UA_ENABLE_TYPENAMES 8338 .memberName =
"isInverse",
8340 .namespaceZero =
true,
8345 #ifdef UA_ENABLE_TYPENAMES 8346 .memberName =
"includeSubtypes",
8348 .namespaceZero =
true,
8353 #ifdef UA_ENABLE_TYPENAMES 8354 .memberName =
"targetName",
8356 .namespaceZero =
true,
8364 #ifdef UA_ENABLE_TYPENAMES 8367 .namespaceZero =
true,
8375 #ifdef UA_ENABLE_TYPENAMES 8376 .memberName =
"objectId",
8378 .namespaceZero =
true,
8383 #ifdef UA_ENABLE_TYPENAMES 8384 .memberName =
"methodId",
8386 .namespaceZero =
true,
8391 #ifdef UA_ENABLE_TYPENAMES 8392 .memberName =
"inputArguments",
8394 .namespaceZero =
true,
8402 #ifdef UA_ENABLE_TYPENAMES 8403 .memberName =
"requestHeader",
8405 .namespaceZero =
true,
8410 #ifdef UA_ENABLE_TYPENAMES 8411 .memberName =
"nodesToUnregister",
8413 .namespaceZero =
true,
8421 #ifdef UA_ENABLE_TYPENAMES 8422 .memberName =
"statusCode",
8424 .namespaceZero =
true,
8429 #ifdef UA_ENABLE_TYPENAMES 8430 .memberName =
"operandStatusCodes",
8432 .namespaceZero =
true,
8437 #ifdef UA_ENABLE_TYPENAMES 8438 .memberName =
"operandDiagnosticInfos",
8440 .namespaceZero =
true,
8448 #ifdef UA_ENABLE_TYPENAMES 8449 .memberName =
"nodeId",
8451 .namespaceZero =
true,
8456 #ifdef UA_ENABLE_TYPENAMES 8457 .memberName =
"typeDefinitionNode",
8459 .namespaceZero =
true,
8464 #ifdef UA_ENABLE_TYPENAMES 8465 .memberName =
"values",
8467 .namespaceZero =
true,
8475 #ifdef UA_ENABLE_TYPENAMES 8476 .memberName =
"policyId",
8478 .namespaceZero =
true,
8486 #ifdef UA_ENABLE_TYPENAMES 8487 .memberName =
"requestHeader",
8489 .namespaceZero =
true,
8494 #ifdef UA_ENABLE_TYPENAMES 8495 .memberName =
"publishingEnabled",
8497 .namespaceZero =
true,
8502 #ifdef UA_ENABLE_TYPENAMES 8503 .memberName =
"subscriptionIds",
8505 .namespaceZero =
true,
8513 #ifdef UA_ENABLE_TYPENAMES 8516 .namespaceZero =
true,
8524 #ifdef UA_ENABLE_TYPENAMES 8525 .memberName =
"requestHeader",
8527 .namespaceZero =
true,
8532 #ifdef UA_ENABLE_TYPENAMES 8533 .memberName =
"methodsToCall",
8535 .namespaceZero =
true,
8543 #ifdef UA_ENABLE_TYPENAMES 8544 .memberName =
"specifiedAttributes",
8546 .namespaceZero =
true,
8551 #ifdef UA_ENABLE_TYPENAMES 8552 .memberName =
"displayName",
8554 .namespaceZero =
true,
8559 #ifdef UA_ENABLE_TYPENAMES 8560 .memberName =
"description",
8562 .namespaceZero =
true,
8567 #ifdef UA_ENABLE_TYPENAMES 8568 .memberName =
"writeMask",
8570 .namespaceZero =
true,
8575 #ifdef UA_ENABLE_TYPENAMES 8576 .memberName =
"userWriteMask",
8578 .namespaceZero =
true,
8583 #ifdef UA_ENABLE_TYPENAMES 8584 .memberName =
"executable",
8586 .namespaceZero =
true,
8591 #ifdef UA_ENABLE_TYPENAMES 8592 .memberName =
"userExecutable",
8594 .namespaceZero =
true,
8602 #ifdef UA_ENABLE_TYPENAMES 8603 .memberName =
"sourceNodeId",
8605 .namespaceZero =
true,
8610 #ifdef UA_ENABLE_TYPENAMES 8611 .memberName =
"referenceTypeId",
8613 .namespaceZero =
true,
8618 #ifdef UA_ENABLE_TYPENAMES 8619 .memberName =
"isForward",
8621 .namespaceZero =
true,
8626 #ifdef UA_ENABLE_TYPENAMES 8627 .memberName =
"targetNodeId",
8629 .namespaceZero =
true,
8634 #ifdef UA_ENABLE_TYPENAMES 8635 .memberName =
"deleteBidirectional",
8637 .namespaceZero =
true,
8645 #ifdef UA_ENABLE_TYPENAMES 8646 .memberName =
"nodeId",
8648 .namespaceZero =
true,
8653 #ifdef UA_ENABLE_TYPENAMES 8654 .memberName =
"attributeId",
8656 .namespaceZero =
true,
8661 #ifdef UA_ENABLE_TYPENAMES 8662 .memberName =
"indexRange",
8664 .namespaceZero =
true,
8669 #ifdef UA_ENABLE_TYPENAMES 8670 .memberName =
"value",
8672 .namespaceZero =
true,
8680 #ifdef UA_ENABLE_TYPENAMES 8681 .memberName =
"statusCode",
8683 .namespaceZero =
true,
8688 #ifdef UA_ENABLE_TYPENAMES 8689 .memberName =
"monitoredItemId",
8691 .namespaceZero =
true,
8696 #ifdef UA_ENABLE_TYPENAMES 8697 .memberName =
"revisedSamplingInterval",
8699 .namespaceZero =
true,
8704 #ifdef UA_ENABLE_TYPENAMES 8705 .memberName =
"revisedQueueSize",
8707 .namespaceZero =
true,
8712 #ifdef UA_ENABLE_TYPENAMES 8713 .memberName =
"filterResult",
8715 .namespaceZero =
true,
8723 #ifdef UA_ENABLE_TYPENAMES 8726 .namespaceZero =
true,
8734 #ifdef UA_ENABLE_TYPENAMES 8735 .memberName =
"clientHandle",
8737 .namespaceZero =
true,
8742 #ifdef UA_ENABLE_TYPENAMES 8743 .memberName =
"samplingInterval",
8745 .namespaceZero =
true,
8750 #ifdef UA_ENABLE_TYPENAMES 8751 .memberName =
"filter",
8753 .namespaceZero =
true,
8758 #ifdef UA_ENABLE_TYPENAMES 8759 .memberName =
"queueSize",
8761 .namespaceZero =
true,
8766 #ifdef UA_ENABLE_TYPENAMES 8767 .memberName =
"discardOldest",
8769 .namespaceZero =
true,
8777 #ifdef UA_ENABLE_TYPENAMES 8778 .memberName =
"algorithm",
8780 .namespaceZero =
true,
8785 #ifdef UA_ENABLE_TYPENAMES 8786 .memberName =
"signature",
8788 .namespaceZero =
true,
8796 #ifdef UA_ENABLE_TYPENAMES 8797 .memberName =
"referenceTypeId",
8799 .namespaceZero =
true,
8804 #ifdef UA_ENABLE_TYPENAMES 8805 .memberName =
"isInverse",
8807 .namespaceZero =
true,
8812 #ifdef UA_ENABLE_TYPENAMES 8813 .memberName =
"targetId",
8815 .namespaceZero =
true,
8823 #ifdef UA_ENABLE_TYPENAMES 8824 .memberName =
"name",
8826 .namespaceZero =
true,
8831 #ifdef UA_ENABLE_TYPENAMES 8832 .memberName =
"dataType",
8834 .namespaceZero =
true,
8839 #ifdef UA_ENABLE_TYPENAMES 8840 .memberName =
"valueRank",
8842 .namespaceZero =
true,
8847 #ifdef UA_ENABLE_TYPENAMES 8848 .memberName =
"arrayDimensions",
8850 .namespaceZero =
true,
8855 #ifdef UA_ENABLE_TYPENAMES 8856 .memberName =
"description",
8858 .namespaceZero =
true,
8866 #ifdef UA_ENABLE_TYPENAMES 8867 .memberName =
"policyId",
8869 .namespaceZero =
true,
8877 #ifdef UA_ENABLE_TYPENAMES 8878 .memberName =
"specifiedAttributes",
8880 .namespaceZero =
true,
8885 #ifdef UA_ENABLE_TYPENAMES 8886 .memberName =
"displayName",
8888 .namespaceZero =
true,
8893 #ifdef UA_ENABLE_TYPENAMES 8894 .memberName =
"description",
8896 .namespaceZero =
true,
8901 #ifdef UA_ENABLE_TYPENAMES 8902 .memberName =
"writeMask",
8904 .namespaceZero =
true,
8909 #ifdef UA_ENABLE_TYPENAMES 8910 .memberName =
"userWriteMask",
8912 .namespaceZero =
true,
8917 #ifdef UA_ENABLE_TYPENAMES 8918 .memberName =
"isAbstract",
8920 .namespaceZero =
true,
8928 #ifdef UA_ENABLE_TYPENAMES 8931 .namespaceZero =
true,
8939 #ifdef UA_ENABLE_TYPENAMES 8942 .namespaceZero =
true,
8950 #ifdef UA_ENABLE_TYPENAMES 8953 .namespaceZero =
true,
8961 #ifdef UA_ENABLE_TYPENAMES 8962 .memberName =
"productUri",
8964 .namespaceZero =
true,
8969 #ifdef UA_ENABLE_TYPENAMES 8970 .memberName =
"manufacturerName",
8972 .namespaceZero =
true,
8977 #ifdef UA_ENABLE_TYPENAMES 8978 .memberName =
"productName",
8980 .namespaceZero =
true,
8985 #ifdef UA_ENABLE_TYPENAMES 8986 .memberName =
"softwareVersion",
8988 .namespaceZero =
true,
8993 #ifdef UA_ENABLE_TYPENAMES 8994 .memberName =
"buildNumber",
8996 .namespaceZero =
true,
9001 #ifdef UA_ENABLE_TYPENAMES 9002 .memberName =
"buildDate",
9004 .namespaceZero =
true,
9012 #ifdef UA_ENABLE_TYPENAMES 9015 .namespaceZero =
true,
9023 #ifdef UA_ENABLE_TYPENAMES 9024 .memberName =
"channelId",
9026 .namespaceZero =
true,
9031 #ifdef UA_ENABLE_TYPENAMES 9032 .memberName =
"tokenId",
9034 .namespaceZero =
true,
9039 #ifdef UA_ENABLE_TYPENAMES 9040 .memberName =
"createdAt",
9042 .namespaceZero =
true,
9047 #ifdef UA_ENABLE_TYPENAMES 9048 .memberName =
"revisedLifetime",
9050 .namespaceZero =
true,
9058 #ifdef UA_ENABLE_TYPENAMES 9059 .memberName =
"clientHandle",
9061 .namespaceZero =
true,
9066 #ifdef UA_ENABLE_TYPENAMES 9067 .memberName =
"value",
9069 .namespaceZero =
true,
9077 #ifdef UA_ENABLE_TYPENAMES 9078 .memberName =
"nodeId",
9080 .namespaceZero =
true,
9085 #ifdef UA_ENABLE_TYPENAMES 9086 .memberName =
"deleteTargetReferences",
9088 .namespaceZero =
true,
9096 #ifdef UA_ENABLE_TYPENAMES 9097 .memberName =
"subscriptionId",
9099 .namespaceZero =
true,
9104 #ifdef UA_ENABLE_TYPENAMES 9105 .memberName =
"sequenceNumber",
9107 .namespaceZero =
true,
9115 #ifdef UA_ENABLE_TYPENAMES 9116 .memberName =
"nodeId",
9118 .namespaceZero =
true,
9123 #ifdef UA_ENABLE_TYPENAMES 9124 .memberName =
"attributeId",
9126 .namespaceZero =
true,
9131 #ifdef UA_ENABLE_TYPENAMES 9132 .memberName =
"indexRange",
9134 .namespaceZero =
true,
9139 #ifdef UA_ENABLE_TYPENAMES 9140 .memberName =
"dataEncoding",
9142 .namespaceZero =
true,
9150 #ifdef UA_ENABLE_TYPENAMES 9151 .memberName =
"specifiedAttributes",
9153 .namespaceZero =
true,
9158 #ifdef UA_ENABLE_TYPENAMES 9159 .memberName =
"displayName",
9161 .namespaceZero =
true,
9166 #ifdef UA_ENABLE_TYPENAMES 9167 .memberName =
"description",
9169 .namespaceZero =
true,
9174 #ifdef UA_ENABLE_TYPENAMES 9175 .memberName =
"writeMask",
9177 .namespaceZero =
true,
9182 #ifdef UA_ENABLE_TYPENAMES 9183 .memberName =
"userWriteMask",
9185 .namespaceZero =
true,
9190 #ifdef UA_ENABLE_TYPENAMES 9191 .memberName =
"isAbstract",
9193 .namespaceZero =
true,
9201 #ifdef UA_ENABLE_TYPENAMES 9202 .memberName =
"timestamp",
9204 .namespaceZero =
true,
9209 #ifdef UA_ENABLE_TYPENAMES 9210 .memberName =
"requestHandle",
9212 .namespaceZero =
true,
9217 #ifdef UA_ENABLE_TYPENAMES 9218 .memberName =
"serviceResult",
9220 .namespaceZero =
true,
9225 #ifdef UA_ENABLE_TYPENAMES 9226 .memberName =
"serviceDiagnostics",
9228 .namespaceZero =
true,
9233 #ifdef UA_ENABLE_TYPENAMES 9234 .memberName =
"stringTable",
9236 .namespaceZero =
true,
9241 #ifdef UA_ENABLE_TYPENAMES 9242 .memberName =
"additionalHeader",
9244 .namespaceZero =
true,
9252 #ifdef UA_ENABLE_TYPENAMES 9253 .memberName =
"requestHeader",
9255 .namespaceZero =
true,
9260 #ifdef UA_ENABLE_TYPENAMES 9261 .memberName =
"subscriptionIds",
9263 .namespaceZero =
true,
9271 #ifdef UA_ENABLE_TYPENAMES 9272 .memberName =
"viewId",
9274 .namespaceZero =
true,
9279 #ifdef UA_ENABLE_TYPENAMES 9280 .memberName =
"timestamp",
9282 .namespaceZero =
true,
9287 #ifdef UA_ENABLE_TYPENAMES 9288 .memberName =
"viewVersion",
9290 .namespaceZero =
true,
9298 #ifdef UA_ENABLE_TYPENAMES 9299 .memberName =
"responseHeader",
9301 .namespaceZero =
true,
9306 #ifdef UA_ENABLE_TYPENAMES 9307 .memberName =
"results",
9309 .namespaceZero =
true,
9314 #ifdef UA_ENABLE_TYPENAMES 9315 .memberName =
"diagnosticInfos",
9317 .namespaceZero =
true,
9325 #ifdef UA_ENABLE_TYPENAMES 9326 .memberName =
"specifiedAttributes",
9328 .namespaceZero =
true,
9333 #ifdef UA_ENABLE_TYPENAMES 9334 .memberName =
"displayName",
9336 .namespaceZero =
true,
9341 #ifdef UA_ENABLE_TYPENAMES 9342 .memberName =
"description",
9344 .namespaceZero =
true,
9349 #ifdef UA_ENABLE_TYPENAMES 9350 .memberName =
"writeMask",
9352 .namespaceZero =
true,
9357 #ifdef UA_ENABLE_TYPENAMES 9358 .memberName =
"userWriteMask",
9360 .namespaceZero =
true,
9368 #ifdef UA_ENABLE_TYPENAMES 9369 .memberName =
"requestHeader",
9371 .namespaceZero =
true,
9376 #ifdef UA_ENABLE_TYPENAMES 9377 .memberName =
"nodesToRegister",
9379 .namespaceZero =
true,
9387 #ifdef UA_ENABLE_TYPENAMES 9388 .memberName =
"requestHeader",
9390 .namespaceZero =
true,
9395 #ifdef UA_ENABLE_TYPENAMES 9396 .memberName =
"nodesToDelete",
9398 .namespaceZero =
true,
9406 #ifdef UA_ENABLE_TYPENAMES 9407 .memberName =
"responseHeader",
9409 .namespaceZero =
true,
9414 #ifdef UA_ENABLE_TYPENAMES 9415 .memberName =
"subscriptionId",
9417 .namespaceZero =
true,
9422 #ifdef UA_ENABLE_TYPENAMES 9423 .memberName =
"availableSequenceNumbers",
9425 .namespaceZero =
true,
9430 #ifdef UA_ENABLE_TYPENAMES 9431 .memberName =
"moreNotifications",
9433 .namespaceZero =
true,
9438 #ifdef UA_ENABLE_TYPENAMES 9439 .memberName =
"notificationMessage",
9441 .namespaceZero =
true,
9446 #ifdef UA_ENABLE_TYPENAMES 9447 .memberName =
"results",
9449 .namespaceZero =
true,
9454 #ifdef UA_ENABLE_TYPENAMES 9455 .memberName =
"diagnosticInfos",
9457 .namespaceZero =
true,
9465 #ifdef UA_ENABLE_TYPENAMES 9466 .memberName =
"monitoredItemId",
9468 .namespaceZero =
true,
9473 #ifdef UA_ENABLE_TYPENAMES 9474 .memberName =
"requestedParameters",
9476 .namespaceZero =
true,
9484 #ifdef UA_ENABLE_TYPENAMES 9485 .memberName =
"policyId",
9487 .namespaceZero =
true,
9492 #ifdef UA_ENABLE_TYPENAMES 9493 .memberName =
"userName",
9495 .namespaceZero =
true,
9500 #ifdef UA_ENABLE_TYPENAMES 9501 .memberName =
"password",
9503 .namespaceZero =
true,
9508 #ifdef UA_ENABLE_TYPENAMES 9509 .memberName =
"encryptionAlgorithm",
9511 .namespaceZero =
true,
9519 #ifdef UA_ENABLE_TYPENAMES 9522 .namespaceZero =
true,
9530 #ifdef UA_ENABLE_TYPENAMES 9533 .namespaceZero =
true,
9541 #ifdef UA_ENABLE_TYPENAMES 9542 .memberName =
"requestHeader",
9544 .namespaceZero =
true,
9549 #ifdef UA_ENABLE_TYPENAMES 9550 .memberName =
"clientSignature",
9552 .namespaceZero =
true,
9557 #ifdef UA_ENABLE_TYPENAMES 9558 .memberName =
"clientSoftwareCertificates",
9560 .namespaceZero =
true,
9565 #ifdef UA_ENABLE_TYPENAMES 9566 .memberName =
"localeIds",
9568 .namespaceZero =
true,
9573 #ifdef UA_ENABLE_TYPENAMES 9574 .memberName =
"userIdentityToken",
9576 .namespaceZero =
true,
9581 #ifdef UA_ENABLE_TYPENAMES 9582 .memberName =
"userTokenSignature",
9584 .namespaceZero =
true,
9592 #ifdef UA_ENABLE_TYPENAMES 9593 .memberName =
"responseHeader",
9595 .namespaceZero =
true,
9600 #ifdef UA_ENABLE_TYPENAMES 9601 .memberName =
"serverProtocolVersion",
9603 .namespaceZero =
true,
9608 #ifdef UA_ENABLE_TYPENAMES 9609 .memberName =
"securityToken",
9611 .namespaceZero =
true,
9616 #ifdef UA_ENABLE_TYPENAMES 9617 .memberName =
"serverNonce",
9619 .namespaceZero =
true,
9627 #ifdef UA_ENABLE_TYPENAMES 9630 .namespaceZero =
true,
9638 #ifdef UA_ENABLE_TYPENAMES 9641 .namespaceZero =
true,
9649 #ifdef UA_ENABLE_TYPENAMES 9650 .memberName =
"responseHeader",
9652 .namespaceZero =
true,
9657 #ifdef UA_ENABLE_TYPENAMES 9658 .memberName =
"queryDataSets",
9660 .namespaceZero =
true,
9665 #ifdef UA_ENABLE_TYPENAMES 9666 .memberName =
"revisedContinuationPoint",
9668 .namespaceZero =
true,
9676 #ifdef UA_ENABLE_TYPENAMES 9677 .memberName =
"responseHeader",
9679 .namespaceZero =
true,
9684 #ifdef UA_ENABLE_TYPENAMES 9685 .memberName =
"serverNonce",
9687 .namespaceZero =
true,
9692 #ifdef UA_ENABLE_TYPENAMES 9693 .memberName =
"results",
9695 .namespaceZero =
true,
9700 #ifdef UA_ENABLE_TYPENAMES 9701 .memberName =
"diagnosticInfos",
9703 .namespaceZero =
true,
9711 #ifdef UA_ENABLE_TYPENAMES 9714 .namespaceZero =
true,
9722 #ifdef UA_ENABLE_TYPENAMES 9723 .memberName =
"requestHeader",
9725 .namespaceZero =
true,
9730 #ifdef UA_ENABLE_TYPENAMES 9731 .memberName =
"releaseContinuationPoint",
9733 .namespaceZero =
true,
9738 #ifdef UA_ENABLE_TYPENAMES 9739 .memberName =
"continuationPoint",
9741 .namespaceZero =
true,
9749 #ifdef UA_ENABLE_TYPENAMES 9750 .memberName =
"responseHeader",
9752 .namespaceZero =
true,
9757 #ifdef UA_ENABLE_TYPENAMES 9758 .memberName =
"results",
9760 .namespaceZero =
true,
9765 #ifdef UA_ENABLE_TYPENAMES 9766 .memberName =
"diagnosticInfos",
9768 .namespaceZero =
true,
9776 #ifdef UA_ENABLE_TYPENAMES 9777 .memberName =
"requestHeader",
9779 .namespaceZero =
true,
9784 #ifdef UA_ENABLE_TYPENAMES 9785 .memberName =
"releaseContinuationPoints",
9787 .namespaceZero =
true,
9792 #ifdef UA_ENABLE_TYPENAMES 9793 .memberName =
"continuationPoints",
9795 .namespaceZero =
true,
9803 #ifdef UA_ENABLE_TYPENAMES 9804 .memberName =
"requestHeader",
9806 .namespaceZero =
true,
9811 #ifdef UA_ENABLE_TYPENAMES 9812 .memberName =
"requestedPublishingInterval",
9814 .namespaceZero =
true,
9819 #ifdef UA_ENABLE_TYPENAMES 9820 .memberName =
"requestedLifetimeCount",
9822 .namespaceZero =
true,
9827 #ifdef UA_ENABLE_TYPENAMES 9828 .memberName =
"requestedMaxKeepAliveCount",
9830 .namespaceZero =
true,
9835 #ifdef UA_ENABLE_TYPENAMES 9836 .memberName =
"maxNotificationsPerPublish",
9838 .namespaceZero =
true,
9843 #ifdef UA_ENABLE_TYPENAMES 9844 .memberName =
"publishingEnabled",
9846 .namespaceZero =
true,
9851 #ifdef UA_ENABLE_TYPENAMES 9852 .memberName =
"priority",
9854 .namespaceZero =
true,
9862 #ifdef UA_ENABLE_TYPENAMES 9863 .memberName =
"specifiedAttributes",
9865 .namespaceZero =
true,
9870 #ifdef UA_ENABLE_TYPENAMES 9871 .memberName =
"displayName",
9873 .namespaceZero =
true,
9878 #ifdef UA_ENABLE_TYPENAMES 9879 .memberName =
"description",
9881 .namespaceZero =
true,
9886 #ifdef UA_ENABLE_TYPENAMES 9887 .memberName =
"writeMask",
9889 .namespaceZero =
true,
9894 #ifdef UA_ENABLE_TYPENAMES 9895 .memberName =
"userWriteMask",
9897 .namespaceZero =
true,
9902 #ifdef UA_ENABLE_TYPENAMES 9903 .memberName =
"value",
9905 .namespaceZero =
true,
9910 #ifdef UA_ENABLE_TYPENAMES 9911 .memberName =
"dataType",
9913 .namespaceZero =
true,
9918 #ifdef UA_ENABLE_TYPENAMES 9919 .memberName =
"valueRank",
9921 .namespaceZero =
true,
9926 #ifdef UA_ENABLE_TYPENAMES 9927 .memberName =
"arrayDimensions",
9929 .namespaceZero =
true,
9934 #ifdef UA_ENABLE_TYPENAMES 9935 .memberName =
"isAbstract",
9937 .namespaceZero =
true,
9945 #ifdef UA_ENABLE_TYPENAMES 9946 .memberName =
"statusCode",
9948 .namespaceZero =
true,
9953 #ifdef UA_ENABLE_TYPENAMES 9954 .memberName =
"targets",
9956 .namespaceZero =
true,
9964 #ifdef UA_ENABLE_TYPENAMES 9965 .memberName =
"responseHeader",
9967 .namespaceZero =
true,
9972 #ifdef UA_ENABLE_TYPENAMES 9973 .memberName =
"revisedPublishingInterval",
9975 .namespaceZero =
true,
9980 #ifdef UA_ENABLE_TYPENAMES 9981 .memberName =
"revisedLifetimeCount",
9983 .namespaceZero =
true,
9988 #ifdef UA_ENABLE_TYPENAMES 9989 .memberName =
"revisedMaxKeepAliveCount",
9991 .namespaceZero =
true,
9999 #ifdef UA_ENABLE_TYPENAMES 10000 .memberName =
"requestHeader",
10002 .namespaceZero =
true,
10007 #ifdef UA_ENABLE_TYPENAMES 10008 .memberName =
"clientProtocolVersion",
10010 .namespaceZero =
true,
10015 #ifdef UA_ENABLE_TYPENAMES 10016 .memberName =
"requestType",
10018 .namespaceZero =
true,
10023 #ifdef UA_ENABLE_TYPENAMES 10024 .memberName =
"securityMode",
10026 .namespaceZero =
true,
10031 #ifdef UA_ENABLE_TYPENAMES 10032 .memberName =
"clientNonce",
10034 .namespaceZero =
true,
10039 #ifdef UA_ENABLE_TYPENAMES 10040 .memberName =
"requestedLifetime",
10042 .namespaceZero =
true,
10050 #ifdef UA_ENABLE_TYPENAMES 10051 .memberName =
"responseHeader",
10053 .namespaceZero =
true,
10058 #ifdef UA_ENABLE_TYPENAMES 10059 .memberName =
"registeredNodeIds",
10061 .namespaceZero =
true,
10069 #ifdef UA_ENABLE_TYPENAMES 10070 .memberName =
"requestHeader",
10072 .namespaceZero =
true,
10077 #ifdef UA_ENABLE_TYPENAMES 10078 .memberName =
"deleteSubscriptions",
10080 .namespaceZero =
true,
10088 #ifdef UA_ENABLE_TYPENAMES 10089 .memberName =
"requestHeader",
10091 .namespaceZero =
true,
10096 #ifdef UA_ENABLE_TYPENAMES 10097 .memberName =
"subscriptionId",
10099 .namespaceZero =
true,
10104 #ifdef UA_ENABLE_TYPENAMES 10105 .memberName =
"requestedPublishingInterval",
10107 .namespaceZero =
true,
10112 #ifdef UA_ENABLE_TYPENAMES 10113 .memberName =
"requestedLifetimeCount",
10115 .namespaceZero =
true,
10120 #ifdef UA_ENABLE_TYPENAMES 10121 .memberName =
"requestedMaxKeepAliveCount",
10123 .namespaceZero =
true,
10128 #ifdef UA_ENABLE_TYPENAMES 10129 .memberName =
"maxNotificationsPerPublish",
10131 .namespaceZero =
true,
10136 #ifdef UA_ENABLE_TYPENAMES 10137 .memberName =
"priority",
10139 .namespaceZero =
true,
10147 #ifdef UA_ENABLE_TYPENAMES 10148 .memberName =
"policyId",
10150 .namespaceZero =
true,
10155 #ifdef UA_ENABLE_TYPENAMES 10156 .memberName =
"tokenType",
10158 .namespaceZero =
true,
10163 #ifdef UA_ENABLE_TYPENAMES 10164 .memberName =
"issuedTokenType",
10166 .namespaceZero =
true,
10171 #ifdef UA_ENABLE_TYPENAMES 10172 .memberName =
"issuerEndpointUrl",
10174 .namespaceZero =
true,
10179 #ifdef UA_ENABLE_TYPENAMES 10180 .memberName =
"securityPolicyUri",
10182 .namespaceZero =
true,
10190 #ifdef UA_ENABLE_TYPENAMES 10191 .memberName =
"requestHeader",
10193 .namespaceZero =
true,
10198 #ifdef UA_ENABLE_TYPENAMES 10199 .memberName =
"subscriptionId",
10201 .namespaceZero =
true,
10206 #ifdef UA_ENABLE_TYPENAMES 10207 .memberName =
"monitoredItemIds",
10209 .namespaceZero =
true,
10217 #ifdef UA_ENABLE_TYPENAMES 10218 .memberName =
"specifiedAttributes",
10220 .namespaceZero =
true,
10225 #ifdef UA_ENABLE_TYPENAMES 10226 .memberName =
"displayName",
10228 .namespaceZero =
true,
10233 #ifdef UA_ENABLE_TYPENAMES 10234 .memberName =
"description",
10236 .namespaceZero =
true,
10241 #ifdef UA_ENABLE_TYPENAMES 10242 .memberName =
"writeMask",
10244 .namespaceZero =
true,
10249 #ifdef UA_ENABLE_TYPENAMES 10250 .memberName =
"userWriteMask",
10252 .namespaceZero =
true,
10257 #ifdef UA_ENABLE_TYPENAMES 10258 .memberName =
"isAbstract",
10260 .namespaceZero =
true,
10265 #ifdef UA_ENABLE_TYPENAMES 10266 .memberName =
"symmetric",
10268 .namespaceZero =
true,
10273 #ifdef UA_ENABLE_TYPENAMES 10274 .memberName =
"inverseName",
10276 .namespaceZero =
true,
10284 #ifdef UA_ENABLE_TYPENAMES 10285 .memberName =
"requestHeader",
10287 .namespaceZero =
true,
10292 #ifdef UA_ENABLE_TYPENAMES 10293 .memberName =
"subscriptionId",
10295 .namespaceZero =
true,
10300 #ifdef UA_ENABLE_TYPENAMES 10301 .memberName =
"monitoringMode",
10303 .namespaceZero =
true,
10308 #ifdef UA_ENABLE_TYPENAMES 10309 .memberName =
"monitoredItemIds",
10311 .namespaceZero =
true,
10319 #ifdef UA_ENABLE_TYPENAMES 10320 .memberName =
"responseHeader",
10322 .namespaceZero =
true,
10330 #ifdef UA_ENABLE_TYPENAMES 10331 .memberName =
"requestHeader",
10333 .namespaceZero =
true,
10338 #ifdef UA_ENABLE_TYPENAMES 10339 .memberName =
"nodesToWrite",
10341 .namespaceZero =
true,
10349 #ifdef UA_ENABLE_TYPENAMES 10350 .memberName =
"specifiedAttributes",
10352 .namespaceZero =
true,
10357 #ifdef UA_ENABLE_TYPENAMES 10358 .memberName =
"displayName",
10360 .namespaceZero =
true,
10365 #ifdef UA_ENABLE_TYPENAMES 10366 .memberName =
"description",
10368 .namespaceZero =
true,
10373 #ifdef UA_ENABLE_TYPENAMES 10374 .memberName =
"writeMask",
10376 .namespaceZero =
true,
10381 #ifdef UA_ENABLE_TYPENAMES 10382 .memberName =
"userWriteMask",
10384 .namespaceZero =
true,
10389 #ifdef UA_ENABLE_TYPENAMES 10390 .memberName =
"eventNotifier",
10392 .namespaceZero =
true,
10400 #ifdef UA_ENABLE_TYPENAMES 10401 .memberName =
"nodeId",
10403 .namespaceZero =
true,
10408 #ifdef UA_ENABLE_TYPENAMES 10409 .memberName =
"browseDirection",
10411 .namespaceZero =
true,
10416 #ifdef UA_ENABLE_TYPENAMES 10417 .memberName =
"referenceTypeId",
10419 .namespaceZero =
true,
10424 #ifdef UA_ENABLE_TYPENAMES 10425 .memberName =
"includeSubtypes",
10427 .namespaceZero =
true,
10432 #ifdef UA_ENABLE_TYPENAMES 10433 .memberName =
"nodeClassMask",
10435 .namespaceZero =
true,
10440 #ifdef UA_ENABLE_TYPENAMES 10441 .memberName =
"resultMask",
10443 .namespaceZero =
true,
10451 #ifdef UA_ENABLE_TYPENAMES 10452 .memberName =
"requestHeader",
10454 .namespaceZero =
true,
10459 #ifdef UA_ENABLE_TYPENAMES 10460 .memberName =
"subscriptionId",
10462 .namespaceZero =
true,
10467 #ifdef UA_ENABLE_TYPENAMES 10468 .memberName =
"retransmitSequenceNumber",
10470 .namespaceZero =
true,
10478 #ifdef UA_ENABLE_TYPENAMES 10479 .memberName =
"requestHeader",
10481 .namespaceZero =
true,
10486 #ifdef UA_ENABLE_TYPENAMES 10487 .memberName =
"endpointUrl",
10489 .namespaceZero =
true,
10494 #ifdef UA_ENABLE_TYPENAMES 10495 .memberName =
"localeIds",
10497 .namespaceZero =
true,
10502 #ifdef UA_ENABLE_TYPENAMES 10503 .memberName =
"profileUris",
10505 .namespaceZero =
true,
10513 #ifdef UA_ENABLE_TYPENAMES 10514 .memberName =
"requestHeader",
10516 .namespaceZero =
true,
10521 #ifdef UA_ENABLE_TYPENAMES 10522 .memberName =
"subscriptionAcknowledgements",
10524 .namespaceZero =
true,
10532 #ifdef UA_ENABLE_TYPENAMES 10533 .memberName =
"responseHeader",
10535 .namespaceZero =
true,
10540 #ifdef UA_ENABLE_TYPENAMES 10541 .memberName =
"results",
10543 .namespaceZero =
true,
10548 #ifdef UA_ENABLE_TYPENAMES 10549 .memberName =
"diagnosticInfos",
10551 .namespaceZero =
true,
10559 #ifdef UA_ENABLE_TYPENAMES 10560 .memberName =
"monitoredItems",
10562 .namespaceZero =
true,
10567 #ifdef UA_ENABLE_TYPENAMES 10568 .memberName =
"diagnosticInfos",
10570 .namespaceZero =
true,
10578 #ifdef UA_ENABLE_TYPENAMES 10579 .memberName =
"responseHeader",
10581 .namespaceZero =
true,
10589 #ifdef UA_ENABLE_TYPENAMES 10590 .memberName =
"requestHeader",
10592 .namespaceZero =
true,
10597 #ifdef UA_ENABLE_TYPENAMES 10598 .memberName =
"subscriptionId",
10600 .namespaceZero =
true,
10605 #ifdef UA_ENABLE_TYPENAMES 10606 .memberName =
"timestampsToReturn",
10608 .namespaceZero =
true,
10613 #ifdef UA_ENABLE_TYPENAMES 10614 .memberName =
"itemsToModify",
10616 .namespaceZero =
true,
10624 #ifdef UA_ENABLE_TYPENAMES 10625 .memberName =
"responseHeader",
10627 .namespaceZero =
true,
10632 #ifdef UA_ENABLE_TYPENAMES 10633 .memberName =
"results",
10635 .namespaceZero =
true,
10640 #ifdef UA_ENABLE_TYPENAMES 10641 .memberName =
"diagnosticInfos",
10643 .namespaceZero =
true,
10651 #ifdef UA_ENABLE_TYPENAMES 10652 .memberName =
"requestHeader",
10654 .namespaceZero =
true,
10659 #ifdef UA_ENABLE_TYPENAMES 10660 .memberName =
"endpointUrl",
10662 .namespaceZero =
true,
10667 #ifdef UA_ENABLE_TYPENAMES 10668 .memberName =
"localeIds",
10670 .namespaceZero =
true,
10675 #ifdef UA_ENABLE_TYPENAMES 10676 .memberName =
"serverUris",
10678 .namespaceZero =
true,
10686 #ifdef UA_ENABLE_TYPENAMES 10687 .memberName =
"referenceTypeId",
10689 .namespaceZero =
true,
10694 #ifdef UA_ENABLE_TYPENAMES 10695 .memberName =
"isForward",
10697 .namespaceZero =
true,
10702 #ifdef UA_ENABLE_TYPENAMES 10703 .memberName =
"nodeId",
10705 .namespaceZero =
true,
10710 #ifdef UA_ENABLE_TYPENAMES 10711 .memberName =
"browseName",
10713 .namespaceZero =
true,
10718 #ifdef UA_ENABLE_TYPENAMES 10719 .memberName =
"displayName",
10721 .namespaceZero =
true,
10726 #ifdef UA_ENABLE_TYPENAMES 10727 .memberName =
"nodeClass",
10729 .namespaceZero =
true,
10734 #ifdef UA_ENABLE_TYPENAMES 10735 .memberName =
"typeDefinition",
10737 .namespaceZero =
true,
10745 #ifdef UA_ENABLE_TYPENAMES 10746 .memberName =
"responseHeader",
10748 .namespaceZero =
true,
10753 #ifdef UA_ENABLE_TYPENAMES 10754 .memberName =
"results",
10756 .namespaceZero =
true,
10761 #ifdef UA_ENABLE_TYPENAMES 10762 .memberName =
"diagnosticInfos",
10764 .namespaceZero =
true,
10772 #ifdef UA_ENABLE_TYPENAMES 10773 .memberName =
"elementResults",
10775 .namespaceZero =
true,
10780 #ifdef UA_ENABLE_TYPENAMES 10781 .memberName =
"elementDiagnosticInfos",
10783 .namespaceZero =
true,
10791 #ifdef UA_ENABLE_TYPENAMES 10792 .memberName =
"sourceNodeId",
10794 .namespaceZero =
true,
10799 #ifdef UA_ENABLE_TYPENAMES 10800 .memberName =
"referenceTypeId",
10802 .namespaceZero =
true,
10807 #ifdef UA_ENABLE_TYPENAMES 10808 .memberName =
"isForward",
10810 .namespaceZero =
true,
10815 #ifdef UA_ENABLE_TYPENAMES 10816 .memberName =
"targetServerUri",
10818 .namespaceZero =
true,
10823 #ifdef UA_ENABLE_TYPENAMES 10824 .memberName =
"targetNodeId",
10826 .namespaceZero =
true,
10831 #ifdef UA_ENABLE_TYPENAMES 10832 .memberName =
"targetNodeClass",
10834 .namespaceZero =
true,
10842 #ifdef UA_ENABLE_TYPENAMES 10843 .memberName =
"responseHeader",
10845 .namespaceZero =
true,
10850 #ifdef UA_ENABLE_TYPENAMES 10851 .memberName =
"subscriptionId",
10853 .namespaceZero =
true,
10858 #ifdef UA_ENABLE_TYPENAMES 10859 .memberName =
"revisedPublishingInterval",
10861 .namespaceZero =
true,
10866 #ifdef UA_ENABLE_TYPENAMES 10867 .memberName =
"revisedLifetimeCount",
10869 .namespaceZero =
true,
10874 #ifdef UA_ENABLE_TYPENAMES 10875 .memberName =
"revisedMaxKeepAliveCount",
10877 .namespaceZero =
true,
10885 #ifdef UA_ENABLE_TYPENAMES 10886 .memberName =
"responseHeader",
10888 .namespaceZero =
true,
10893 #ifdef UA_ENABLE_TYPENAMES 10894 .memberName =
"results",
10896 .namespaceZero =
true,
10901 #ifdef UA_ENABLE_TYPENAMES 10902 .memberName =
"diagnosticInfos",
10904 .namespaceZero =
true,
10912 #ifdef UA_ENABLE_TYPENAMES 10913 .memberName =
"elements",
10915 .namespaceZero =
true,
10923 #ifdef UA_ENABLE_TYPENAMES 10924 .memberName =
"responseHeader",
10926 .namespaceZero =
true,
10931 #ifdef UA_ENABLE_TYPENAMES 10932 .memberName =
"results",
10934 .namespaceZero =
true,
10939 #ifdef UA_ENABLE_TYPENAMES 10940 .memberName =
"diagnosticInfos",
10942 .namespaceZero =
true,
10950 #ifdef UA_ENABLE_TYPENAMES 10951 .memberName =
"responseHeader",
10953 .namespaceZero =
true,
10958 #ifdef UA_ENABLE_TYPENAMES 10959 .memberName =
"results",
10961 .namespaceZero =
true,
10966 #ifdef UA_ENABLE_TYPENAMES 10967 .memberName =
"diagnosticInfos",
10969 .namespaceZero =
true,
10977 #ifdef UA_ENABLE_TYPENAMES 10978 .memberName =
"responseHeader",
10980 .namespaceZero =
true,
10985 #ifdef UA_ENABLE_TYPENAMES 10986 .memberName =
"results",
10988 .namespaceZero =
true,
10993 #ifdef UA_ENABLE_TYPENAMES 10994 .memberName =
"diagnosticInfos",
10996 .namespaceZero =
true,
11004 #ifdef UA_ENABLE_TYPENAMES 11005 .memberName =
"responseHeader",
11007 .namespaceZero =
true,
11012 #ifdef UA_ENABLE_TYPENAMES 11013 .memberName =
"results",
11015 .namespaceZero =
true,
11020 #ifdef UA_ENABLE_TYPENAMES 11021 .memberName =
"diagnosticInfos",
11023 .namespaceZero =
true,
11031 #ifdef UA_ENABLE_TYPENAMES 11032 .memberName =
"responseHeader",
11034 .namespaceZero =
true,
11039 #ifdef UA_ENABLE_TYPENAMES 11040 .memberName =
"notificationMessage",
11042 .namespaceZero =
true,
11050 #ifdef UA_ENABLE_TYPENAMES 11051 .memberName =
"itemToMonitor",
11053 .namespaceZero =
true,
11058 #ifdef UA_ENABLE_TYPENAMES 11059 .memberName =
"monitoringMode",
11061 .namespaceZero =
true,
11066 #ifdef UA_ENABLE_TYPENAMES 11067 .memberName =
"requestedParameters",
11069 .namespaceZero =
true,
11077 #ifdef UA_ENABLE_TYPENAMES 11078 .memberName =
"requestHeader",
11080 .namespaceZero =
true,
11085 #ifdef UA_ENABLE_TYPENAMES 11086 .memberName =
"referencesToDelete",
11088 .namespaceZero =
true,
11096 #ifdef UA_ENABLE_TYPENAMES 11097 .memberName =
"responseHeader",
11099 .namespaceZero =
true,
11104 #ifdef UA_ENABLE_TYPENAMES 11105 .memberName =
"results",
11107 .namespaceZero =
true,
11112 #ifdef UA_ENABLE_TYPENAMES 11113 .memberName =
"diagnosticInfos",
11115 .namespaceZero =
true,
11123 #ifdef UA_ENABLE_TYPENAMES 11124 .memberName =
"responseHeader",
11126 .namespaceZero =
true,
11131 #ifdef UA_ENABLE_TYPENAMES 11132 .memberName =
"results",
11134 .namespaceZero =
true,
11139 #ifdef UA_ENABLE_TYPENAMES 11140 .memberName =
"diagnosticInfos",
11142 .namespaceZero =
true,
11150 #ifdef UA_ENABLE_TYPENAMES 11151 .memberName =
"requestHeader",
11153 .namespaceZero =
true,
11158 #ifdef UA_ENABLE_TYPENAMES 11159 .memberName =
"referencesToAdd",
11161 .namespaceZero =
true,
11169 #ifdef UA_ENABLE_TYPENAMES 11170 .memberName =
"requestHeader",
11172 .namespaceZero =
true,
11177 #ifdef UA_ENABLE_TYPENAMES 11178 .memberName =
"maxAge",
11180 .namespaceZero =
true,
11185 #ifdef UA_ENABLE_TYPENAMES 11186 .memberName =
"timestampsToReturn",
11188 .namespaceZero =
true,
11193 #ifdef UA_ENABLE_TYPENAMES 11194 .memberName =
"nodesToRead",
11196 .namespaceZero =
true,
11204 #ifdef UA_ENABLE_TYPENAMES 11205 .memberName =
"parentNodeId",
11207 .namespaceZero =
true,
11212 #ifdef UA_ENABLE_TYPENAMES 11213 .memberName =
"referenceTypeId",
11215 .namespaceZero =
true,
11220 #ifdef UA_ENABLE_TYPENAMES 11221 .memberName =
"requestedNewNodeId",
11223 .namespaceZero =
true,
11228 #ifdef UA_ENABLE_TYPENAMES 11229 .memberName =
"browseName",
11231 .namespaceZero =
true,
11236 #ifdef UA_ENABLE_TYPENAMES 11237 .memberName =
"nodeClass",
11239 .namespaceZero =
true,
11244 #ifdef UA_ENABLE_TYPENAMES 11245 .memberName =
"nodeAttributes",
11247 .namespaceZero =
true,
11252 #ifdef UA_ENABLE_TYPENAMES 11253 .memberName =
"typeDefinition",
11255 .namespaceZero =
true,
11263 #ifdef UA_ENABLE_TYPENAMES 11264 .memberName =
"startTime",
11266 .namespaceZero =
true,
11271 #ifdef UA_ENABLE_TYPENAMES 11272 .memberName =
"currentTime",
11274 .namespaceZero =
true,
11279 #ifdef UA_ENABLE_TYPENAMES 11280 .memberName =
"state",
11282 .namespaceZero =
true,
11287 #ifdef UA_ENABLE_TYPENAMES 11288 .memberName =
"buildInfo",
11290 .namespaceZero =
true,
11295 #ifdef UA_ENABLE_TYPENAMES 11296 .memberName =
"secondsTillShutdown",
11298 .namespaceZero =
true,
11303 #ifdef UA_ENABLE_TYPENAMES 11304 .memberName =
"shutdownReason",
11306 .namespaceZero =
true,
11314 #ifdef UA_ENABLE_TYPENAMES 11315 .memberName =
"responseHeader",
11317 .namespaceZero =
true,
11322 #ifdef UA_ENABLE_TYPENAMES 11323 .memberName =
"results",
11325 .namespaceZero =
true,
11330 #ifdef UA_ENABLE_TYPENAMES 11331 .memberName =
"diagnosticInfos",
11333 .namespaceZero =
true,
11341 #ifdef UA_ENABLE_TYPENAMES 11342 .memberName =
"responseHeader",
11344 .namespaceZero =
true,
11349 #ifdef UA_ENABLE_TYPENAMES 11350 .memberName =
"results",
11352 .namespaceZero =
true,
11357 #ifdef UA_ENABLE_TYPENAMES 11358 .memberName =
"diagnosticInfos",
11360 .namespaceZero =
true,
11368 #ifdef UA_ENABLE_TYPENAMES 11369 .memberName =
"trigger",
11371 .namespaceZero =
true,
11376 #ifdef UA_ENABLE_TYPENAMES 11377 .memberName =
"deadbandType",
11379 .namespaceZero =
true,
11384 #ifdef UA_ENABLE_TYPENAMES 11385 .memberName =
"deadbandValue",
11387 .namespaceZero =
true,
11395 #ifdef UA_ENABLE_TYPENAMES 11396 .memberName =
"filterOperator",
11398 .namespaceZero =
true,
11403 #ifdef UA_ENABLE_TYPENAMES 11404 .memberName =
"filterOperands",
11406 .namespaceZero =
true,
11414 #ifdef UA_ENABLE_TYPENAMES 11415 .memberName =
"responseHeader",
11417 .namespaceZero =
true,
11425 #ifdef UA_ENABLE_TYPENAMES 11426 .memberName =
"applicationUri",
11428 .namespaceZero =
true,
11433 #ifdef UA_ENABLE_TYPENAMES 11434 .memberName =
"productUri",
11436 .namespaceZero =
true,
11441 #ifdef UA_ENABLE_TYPENAMES 11442 .memberName =
"applicationName",
11444 .namespaceZero =
true,
11449 #ifdef UA_ENABLE_TYPENAMES 11450 .memberName =
"applicationType",
11452 .namespaceZero =
true,
11457 #ifdef UA_ENABLE_TYPENAMES 11458 .memberName =
"gatewayServerUri",
11460 .namespaceZero =
true,
11465 #ifdef UA_ENABLE_TYPENAMES 11466 .memberName =
"discoveryProfileUri",
11468 .namespaceZero =
true,
11473 #ifdef UA_ENABLE_TYPENAMES 11474 .memberName =
"discoveryUrls",
11476 .namespaceZero =
true,
11484 #ifdef UA_ENABLE_TYPENAMES 11485 .memberName =
"responseHeader",
11487 .namespaceZero =
true,
11495 #ifdef UA_ENABLE_TYPENAMES 11496 .memberName =
"responseHeader",
11498 .namespaceZero =
true,
11503 #ifdef UA_ENABLE_TYPENAMES 11504 .memberName =
"servers",
11506 .namespaceZero =
true,
11514 #ifdef UA_ENABLE_TYPENAMES 11515 .memberName =
"requestHeader",
11517 .namespaceZero =
true,
11522 #ifdef UA_ENABLE_TYPENAMES 11523 .memberName =
"subscriptionId",
11525 .namespaceZero =
true,
11530 #ifdef UA_ENABLE_TYPENAMES 11531 .memberName =
"timestampsToReturn",
11533 .namespaceZero =
true,
11538 #ifdef UA_ENABLE_TYPENAMES 11539 .memberName =
"itemsToCreate",
11541 .namespaceZero =
true,
11549 #ifdef UA_ENABLE_TYPENAMES 11550 .memberName =
"elements",
11552 .namespaceZero =
true,
11560 #ifdef UA_ENABLE_TYPENAMES 11561 .memberName =
"responseHeader",
11563 .namespaceZero =
true,
11568 #ifdef UA_ENABLE_TYPENAMES 11569 .memberName =
"queryDataSets",
11571 .namespaceZero =
true,
11576 #ifdef UA_ENABLE_TYPENAMES 11577 .memberName =
"continuationPoint",
11579 .namespaceZero =
true,
11584 #ifdef UA_ENABLE_TYPENAMES 11585 .memberName =
"parsingResults",
11587 .namespaceZero =
true,
11592 #ifdef UA_ENABLE_TYPENAMES 11593 .memberName =
"diagnosticInfos",
11595 .namespaceZero =
true,
11600 #ifdef UA_ENABLE_TYPENAMES 11601 .memberName =
"filterResult",
11603 .namespaceZero =
true,
11611 #ifdef UA_ENABLE_TYPENAMES 11612 .memberName =
"requestHeader",
11614 .namespaceZero =
true,
11619 #ifdef UA_ENABLE_TYPENAMES 11620 .memberName =
"nodesToAdd",
11622 .namespaceZero =
true,
11630 #ifdef UA_ENABLE_TYPENAMES 11631 .memberName =
"requestHeader",
11633 .namespaceZero =
true,
11638 #ifdef UA_ENABLE_TYPENAMES 11639 .memberName =
"view",
11641 .namespaceZero =
true,
11646 #ifdef UA_ENABLE_TYPENAMES 11647 .memberName =
"requestedMaxReferencesPerNode",
11649 .namespaceZero =
true,
11654 #ifdef UA_ENABLE_TYPENAMES 11655 .memberName =
"nodesToBrowse",
11657 .namespaceZero =
true,
11665 #ifdef UA_ENABLE_TYPENAMES 11666 .memberName =
"startingNode",
11668 .namespaceZero =
true,
11673 #ifdef UA_ENABLE_TYPENAMES 11674 .memberName =
"relativePath",
11676 .namespaceZero =
true,
11684 #ifdef UA_ENABLE_TYPENAMES 11685 .memberName =
"statusCode",
11687 .namespaceZero =
true,
11692 #ifdef UA_ENABLE_TYPENAMES 11693 .memberName =
"continuationPoint",
11695 .namespaceZero =
true,
11700 #ifdef UA_ENABLE_TYPENAMES 11701 .memberName =
"references",
11703 .namespaceZero =
true,
11711 #ifdef UA_ENABLE_TYPENAMES 11712 .memberName =
"requestHeader",
11714 .namespaceZero =
true,
11719 #ifdef UA_ENABLE_TYPENAMES 11720 .memberName =
"clientDescription",
11722 .namespaceZero =
true,
11727 #ifdef UA_ENABLE_TYPENAMES 11728 .memberName =
"serverUri",
11730 .namespaceZero =
true,
11735 #ifdef UA_ENABLE_TYPENAMES 11736 .memberName =
"endpointUrl",
11738 .namespaceZero =
true,
11743 #ifdef UA_ENABLE_TYPENAMES 11744 .memberName =
"sessionName",
11746 .namespaceZero =
true,
11751 #ifdef UA_ENABLE_TYPENAMES 11752 .memberName =
"clientNonce",
11754 .namespaceZero =
true,
11759 #ifdef UA_ENABLE_TYPENAMES 11760 .memberName =
"clientCertificate",
11762 .namespaceZero =
true,
11767 #ifdef UA_ENABLE_TYPENAMES 11768 .memberName =
"requestedSessionTimeout",
11770 .namespaceZero =
true,
11775 #ifdef UA_ENABLE_TYPENAMES 11776 .memberName =
"maxResponseMessageSize",
11778 .namespaceZero =
true,
11786 #ifdef UA_ENABLE_TYPENAMES 11787 .memberName =
"relativePath",
11789 .namespaceZero =
true,
11794 #ifdef UA_ENABLE_TYPENAMES 11795 .memberName =
"attributeId",
11797 .namespaceZero =
true,
11802 #ifdef UA_ENABLE_TYPENAMES 11803 .memberName =
"indexRange",
11805 .namespaceZero =
true,
11813 #ifdef UA_ENABLE_TYPENAMES 11814 .memberName =
"endpointUrl",
11816 .namespaceZero =
true,
11821 #ifdef UA_ENABLE_TYPENAMES 11822 .memberName =
"server",
11824 .namespaceZero =
true,
11829 #ifdef UA_ENABLE_TYPENAMES 11830 .memberName =
"serverCertificate",
11832 .namespaceZero =
true,
11837 #ifdef UA_ENABLE_TYPENAMES 11838 .memberName =
"securityMode",
11840 .namespaceZero =
true,
11845 #ifdef UA_ENABLE_TYPENAMES 11846 .memberName =
"securityPolicyUri",
11848 .namespaceZero =
true,
11853 #ifdef UA_ENABLE_TYPENAMES 11854 .memberName =
"userIdentityTokens",
11856 .namespaceZero =
true,
11861 #ifdef UA_ENABLE_TYPENAMES 11862 .memberName =
"transportProfileUri",
11864 .namespaceZero =
true,
11869 #ifdef UA_ENABLE_TYPENAMES 11870 .memberName =
"securityLevel",
11872 .namespaceZero =
true,
11880 #ifdef UA_ENABLE_TYPENAMES 11881 .memberName =
"responseHeader",
11883 .namespaceZero =
true,
11888 #ifdef UA_ENABLE_TYPENAMES 11889 .memberName =
"endpoints",
11891 .namespaceZero =
true,
11899 #ifdef UA_ENABLE_TYPENAMES 11900 .memberName =
"typeDefinitionNode",
11902 .namespaceZero =
true,
11907 #ifdef UA_ENABLE_TYPENAMES 11908 .memberName =
"includeSubTypes",
11910 .namespaceZero =
true,
11915 #ifdef UA_ENABLE_TYPENAMES 11916 .memberName =
"dataToReturn",
11918 .namespaceZero =
true,
11926 #ifdef UA_ENABLE_TYPENAMES 11927 .memberName =
"responseHeader",
11929 .namespaceZero =
true,
11934 #ifdef UA_ENABLE_TYPENAMES 11935 .memberName =
"results",
11937 .namespaceZero =
true,
11942 #ifdef UA_ENABLE_TYPENAMES 11943 .memberName =
"diagnosticInfos",
11945 .namespaceZero =
true,
11953 #ifdef UA_ENABLE_TYPENAMES 11954 .memberName =
"requestHeader",
11956 .namespaceZero =
true,
11961 #ifdef UA_ENABLE_TYPENAMES 11962 .memberName =
"browsePaths",
11964 .namespaceZero =
true,
11972 #ifdef UA_ENABLE_TYPENAMES 11973 .memberName =
"responseHeader",
11975 .namespaceZero =
true,
11980 #ifdef UA_ENABLE_TYPENAMES 11981 .memberName =
"results",
11983 .namespaceZero =
true,
11988 #ifdef UA_ENABLE_TYPENAMES 11989 .memberName =
"diagnosticInfos",
11991 .namespaceZero =
true,
11999 #ifdef UA_ENABLE_TYPENAMES 12000 .memberName =
"responseHeader",
12002 .namespaceZero =
true,
12007 #ifdef UA_ENABLE_TYPENAMES 12008 .memberName =
"sessionId",
12010 .namespaceZero =
true,
12015 #ifdef UA_ENABLE_TYPENAMES 12016 .memberName =
"authenticationToken",
12018 .namespaceZero =
true,
12023 #ifdef UA_ENABLE_TYPENAMES 12024 .memberName =
"revisedSessionTimeout",
12026 .namespaceZero =
true,
12031 #ifdef UA_ENABLE_TYPENAMES 12032 .memberName =
"serverNonce",
12034 .namespaceZero =
true,
12039 #ifdef UA_ENABLE_TYPENAMES 12040 .memberName =
"serverCertificate",
12042 .namespaceZero =
true,
12047 #ifdef UA_ENABLE_TYPENAMES 12048 .memberName =
"serverEndpoints",
12050 .namespaceZero =
true,
12055 #ifdef UA_ENABLE_TYPENAMES 12056 .memberName =
"serverSoftwareCertificates",
12058 .namespaceZero =
true,
12063 #ifdef UA_ENABLE_TYPENAMES 12064 .memberName =
"serverSignature",
12066 .namespaceZero =
true,
12071 #ifdef UA_ENABLE_TYPENAMES 12072 .memberName =
"maxRequestMessageSize",
12074 .namespaceZero =
true,
12082 #ifdef UA_ENABLE_TYPENAMES 12083 .memberName =
"requestHeader",
12085 .namespaceZero =
true,
12090 #ifdef UA_ENABLE_TYPENAMES 12091 .memberName =
"view",
12093 .namespaceZero =
true,
12098 #ifdef UA_ENABLE_TYPENAMES 12099 .memberName =
"nodeTypes",
12101 .namespaceZero =
true,
12106 #ifdef UA_ENABLE_TYPENAMES 12107 .memberName =
"filter",
12109 .namespaceZero =
true,
12114 #ifdef UA_ENABLE_TYPENAMES 12115 .memberName =
"maxDataSetsToReturn",
12117 .namespaceZero =
true,
12122 #ifdef UA_ENABLE_TYPENAMES 12123 .memberName =
"maxReferencesToReturn",
12125 .namespaceZero =
true,
12134 #ifdef UA_ENABLE_TYPENAMES 12135 .typeName =
"Boolean",
12140 .overlayable =
true,
12141 .binaryEncodingId = 0,
12143 .members = Boolean_members },
12146 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 2},
12148 #ifdef UA_ENABLE_TYPENAMES 12149 .typeName =
"SByte",
12154 .overlayable =
true,
12155 .binaryEncodingId = 0,
12157 .members = SByte_members },
12160 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 3},
12162 #ifdef UA_ENABLE_TYPENAMES 12163 .typeName =
"Byte",
12168 .overlayable =
true,
12169 .binaryEncodingId = 0,
12171 .members = Byte_members },
12174 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 4},
12176 #ifdef UA_ENABLE_TYPENAMES 12177 .typeName =
"Int16",
12183 .binaryEncodingId = 0,
12185 .members = Int16_members },
12188 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 5},
12190 #ifdef UA_ENABLE_TYPENAMES 12191 .typeName =
"UInt16",
12197 .binaryEncodingId = 0,
12199 .members = UInt16_members },
12202 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12204 #ifdef UA_ENABLE_TYPENAMES 12205 .typeName =
"Int32",
12211 .binaryEncodingId = 0,
12213 .members = Int32_members },
12216 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 7},
12218 #ifdef UA_ENABLE_TYPENAMES 12219 .typeName =
"UInt32",
12225 .binaryEncodingId = 0,
12227 .members = UInt32_members },
12230 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 8},
12232 #ifdef UA_ENABLE_TYPENAMES 12233 .typeName =
"Int64",
12239 .binaryEncodingId = 0,
12241 .members = Int64_members },
12244 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 9},
12246 #ifdef UA_ENABLE_TYPENAMES 12247 .typeName =
"UInt64",
12253 .binaryEncodingId = 0,
12255 .members = UInt64_members },
12258 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 10},
12260 #ifdef UA_ENABLE_TYPENAMES 12261 .typeName =
"Float",
12267 .binaryEncodingId = 0,
12269 .members = Float_members },
12272 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 11},
12274 #ifdef UA_ENABLE_TYPENAMES 12275 .typeName =
"Double",
12281 .binaryEncodingId = 0,
12283 .members = Double_members },
12286 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 12},
12288 #ifdef UA_ENABLE_TYPENAMES 12289 .typeName =
"String",
12293 .fixedSize =
false,
12294 .overlayable =
false,
12295 .binaryEncodingId = 0,
12297 .members = String_members },
12300 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 13},
12302 #ifdef UA_ENABLE_TYPENAMES 12303 .typeName =
"DateTime",
12309 .binaryEncodingId = 0,
12311 .members = DateTime_members },
12314 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 14},
12316 #ifdef UA_ENABLE_TYPENAMES 12317 .typeName =
"Guid",
12323 .binaryEncodingId = 0,
12325 .members = Guid_members },
12328 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 15},
12330 #ifdef UA_ENABLE_TYPENAMES 12331 .typeName =
"ByteString",
12335 .fixedSize =
false,
12336 .overlayable =
false,
12337 .binaryEncodingId = 0,
12339 .members = ByteString_members },
12342 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 16},
12344 #ifdef UA_ENABLE_TYPENAMES 12345 .typeName =
"XmlElement",
12349 .fixedSize =
false,
12350 .overlayable =
false,
12351 .binaryEncodingId = 0,
12353 .members = XmlElement_members },
12356 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 17},
12358 #ifdef UA_ENABLE_TYPENAMES 12359 .typeName =
"NodeId",
12363 .fixedSize =
false,
12364 .overlayable =
false,
12365 .binaryEncodingId = 0,
12367 .members = NodeId_members },
12370 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 18},
12372 #ifdef UA_ENABLE_TYPENAMES 12373 .typeName =
"ExpandedNodeId",
12377 .fixedSize =
false,
12378 .overlayable =
false,
12379 .binaryEncodingId = 0,
12381 .members = ExpandedNodeId_members },
12384 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 19},
12386 #ifdef UA_ENABLE_TYPENAMES 12387 .typeName =
"StatusCode",
12393 .binaryEncodingId = 0,
12395 .members = StatusCode_members },
12398 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 20},
12400 #ifdef UA_ENABLE_TYPENAMES 12401 .typeName =
"QualifiedName",
12405 .fixedSize =
false,
12406 .overlayable =
false,
12407 .binaryEncodingId = 0,
12409 .members = QualifiedName_members },
12412 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 21},
12414 #ifdef UA_ENABLE_TYPENAMES 12415 .typeName =
"LocalizedText",
12419 .fixedSize =
false,
12420 .overlayable =
false,
12421 .binaryEncodingId = 0,
12423 .members = LocalizedText_members },
12426 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 22},
12428 #ifdef UA_ENABLE_TYPENAMES 12429 .typeName =
"ExtensionObject",
12433 .fixedSize =
false,
12434 .overlayable =
false,
12435 .binaryEncodingId = 0,
12437 .members = ExtensionObject_members },
12440 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 23},
12442 #ifdef UA_ENABLE_TYPENAMES 12443 .typeName =
"DataValue",
12447 .fixedSize =
false,
12448 .overlayable =
false,
12449 .binaryEncodingId = 0,
12451 .members = DataValue_members },
12454 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 24},
12456 #ifdef UA_ENABLE_TYPENAMES 12457 .typeName =
"Variant",
12461 .fixedSize =
false,
12462 .overlayable =
false,
12463 .binaryEncodingId = 0,
12465 .members = Variant_members },
12468 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 25},
12470 #ifdef UA_ENABLE_TYPENAMES 12471 .typeName =
"DiagnosticInfo",
12475 .fixedSize =
false,
12476 .overlayable =
false,
12477 .binaryEncodingId = 0,
12479 .members = DiagnosticInfo_members },
12482 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 344},
12484 #ifdef UA_ENABLE_TYPENAMES 12485 .typeName =
"SignedSoftwareCertificate",
12489 .fixedSize =
false,
12490 .overlayable =
false,
12491 .binaryEncodingId = 346,
12493 .members = SignedSoftwareCertificate_members },
12496 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 546},
12498 #ifdef UA_ENABLE_TYPENAMES 12499 .typeName =
"BrowsePathTarget",
12503 .fixedSize =
false,
12504 .overlayable =
false,
12505 .binaryEncodingId = 548,
12507 .members = BrowsePathTarget_members },
12510 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 373},
12512 #ifdef UA_ENABLE_TYPENAMES 12513 .typeName =
"ViewAttributes",
12517 .fixedSize =
false,
12518 .overlayable =
false,
12519 .binaryEncodingId = 375,
12521 .members = ViewAttributes_members },
12524 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12526 #ifdef UA_ENABLE_TYPENAMES 12527 .typeName =
"BrowseResultMask",
12533 .binaryEncodingId = 0,
12535 .members = BrowseResultMask_members },
12538 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 389},
12540 #ifdef UA_ENABLE_TYPENAMES 12541 .typeName =
"RequestHeader",
12545 .fixedSize =
false,
12546 .overlayable =
false,
12547 .binaryEncodingId = 391,
12549 .members = RequestHeader_members },
12552 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 758},
12554 #ifdef UA_ENABLE_TYPENAMES 12555 .typeName =
"MonitoredItemModifyResult",
12559 .fixedSize =
false,
12560 .overlayable =
false,
12561 .binaryEncodingId = 760,
12563 .members = MonitoredItemModifyResult_members },
12566 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 450},
12568 #ifdef UA_ENABLE_TYPENAMES 12569 .typeName =
"CloseSecureChannelRequest",
12573 .fixedSize =
false,
12574 .overlayable =
false,
12575 .binaryEncodingId = 452,
12577 .members = CloseSecureChannelRequest_members },
12580 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 483},
12582 #ifdef UA_ENABLE_TYPENAMES 12583 .typeName =
"AddNodesResult",
12587 .fixedSize =
false,
12588 .overlayable =
false,
12589 .binaryEncodingId = 485,
12591 .members = AddNodesResult_members },
12594 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 355},
12596 #ifdef UA_ENABLE_TYPENAMES 12597 .typeName =
"VariableAttributes",
12601 .fixedSize =
false,
12602 .overlayable =
false,
12603 .binaryEncodingId = 357,
12605 .members = VariableAttributes_members },
12608 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 803},
12610 #ifdef UA_ENABLE_TYPENAMES 12611 .typeName =
"NotificationMessage",
12615 .fixedSize =
false,
12616 .overlayable =
false,
12617 .binaryEncodingId = 805,
12619 .members = NotificationMessage_members },
12622 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12624 #ifdef UA_ENABLE_TYPENAMES 12625 .typeName =
"NodeAttributesMask",
12631 .binaryEncodingId = 0,
12633 .members = NodeAttributesMask_members },
12636 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12638 #ifdef UA_ENABLE_TYPENAMES 12639 .typeName =
"MonitoringMode",
12645 .binaryEncodingId = 0,
12647 .members = MonitoringMode_members },
12650 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 707},
12652 #ifdef UA_ENABLE_TYPENAMES 12653 .typeName =
"CallMethodResult",
12657 .fixedSize =
false,
12658 .overlayable =
false,
12659 .binaryEncodingId = 709,
12661 .members = CallMethodResult_members },
12664 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 610},
12666 #ifdef UA_ENABLE_TYPENAMES 12667 .typeName =
"ParsingResult",
12671 .fixedSize =
false,
12672 .overlayable =
false,
12673 .binaryEncodingId = 612,
12675 .members = ParsingResult_members },
12678 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 537},
12680 #ifdef UA_ENABLE_TYPENAMES 12681 .typeName =
"RelativePathElement",
12685 .fixedSize =
false,
12686 .overlayable =
false,
12687 .binaryEncodingId = 539,
12689 .members = RelativePathElement_members },
12692 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12694 #ifdef UA_ENABLE_TYPENAMES 12695 .typeName =
"BrowseDirection",
12701 .binaryEncodingId = 0,
12703 .members = BrowseDirection_members },
12706 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 704},
12708 #ifdef UA_ENABLE_TYPENAMES 12709 .typeName =
"CallMethodRequest",
12713 .fixedSize =
false,
12714 .overlayable =
false,
12715 .binaryEncodingId = 706,
12717 .members = CallMethodRequest_members },
12720 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 564},
12722 #ifdef UA_ENABLE_TYPENAMES 12723 .typeName =
"UnregisterNodesRequest",
12727 .fixedSize =
false,
12728 .overlayable =
false,
12729 .binaryEncodingId = 566,
12731 .members = UnregisterNodesRequest_members },
12734 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 604},
12736 #ifdef UA_ENABLE_TYPENAMES 12737 .typeName =
"ContentFilterElementResult",
12741 .fixedSize =
false,
12742 .overlayable =
false,
12743 .binaryEncodingId = 606,
12745 .members = ContentFilterElementResult_members },
12748 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 577},
12750 #ifdef UA_ENABLE_TYPENAMES 12751 .typeName =
"QueryDataSet",
12755 .fixedSize =
false,
12756 .overlayable =
false,
12757 .binaryEncodingId = 579,
12759 .members = QueryDataSet_members },
12762 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 319},
12764 #ifdef UA_ENABLE_TYPENAMES 12765 .typeName =
"AnonymousIdentityToken",
12769 .fixedSize =
false,
12770 .overlayable =
false,
12771 .binaryEncodingId = 321,
12773 .members = AnonymousIdentityToken_members },
12776 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 797},
12778 #ifdef UA_ENABLE_TYPENAMES 12779 .typeName =
"SetPublishingModeRequest",
12783 .fixedSize =
false,
12784 .overlayable =
false,
12785 .binaryEncodingId = 799,
12787 .members = SetPublishingModeRequest_members },
12790 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12792 #ifdef UA_ENABLE_TYPENAMES 12793 .typeName =
"TimestampsToReturn",
12799 .binaryEncodingId = 0,
12801 .members = TimestampsToReturn_members },
12804 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 710},
12806 #ifdef UA_ENABLE_TYPENAMES 12807 .typeName =
"CallRequest",
12811 .fixedSize =
false,
12812 .overlayable =
false,
12813 .binaryEncodingId = 712,
12815 .members = CallRequest_members },
12818 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 358},
12820 #ifdef UA_ENABLE_TYPENAMES 12821 .typeName =
"MethodAttributes",
12825 .fixedSize =
false,
12826 .overlayable =
false,
12827 .binaryEncodingId = 360,
12829 .members = MethodAttributes_members },
12832 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 385},
12834 #ifdef UA_ENABLE_TYPENAMES 12835 .typeName =
"DeleteReferencesItem",
12839 .fixedSize =
false,
12840 .overlayable =
false,
12841 .binaryEncodingId = 387,
12843 .members = DeleteReferencesItem_members },
12846 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 668},
12848 #ifdef UA_ENABLE_TYPENAMES 12849 .typeName =
"WriteValue",
12853 .fixedSize =
false,
12854 .overlayable =
false,
12855 .binaryEncodingId = 670,
12857 .members = WriteValue_members },
12860 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 746},
12862 #ifdef UA_ENABLE_TYPENAMES 12863 .typeName =
"MonitoredItemCreateResult",
12867 .fixedSize =
false,
12868 .overlayable =
false,
12869 .binaryEncodingId = 748,
12871 .members = MonitoredItemCreateResult_members },
12874 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12876 #ifdef UA_ENABLE_TYPENAMES 12877 .typeName =
"MessageSecurityMode",
12883 .binaryEncodingId = 0,
12885 .members = MessageSecurityMode_members },
12888 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 740},
12890 #ifdef UA_ENABLE_TYPENAMES 12891 .typeName =
"MonitoringParameters",
12895 .fixedSize =
false,
12896 .overlayable =
false,
12897 .binaryEncodingId = 742,
12899 .members = MonitoringParameters_members },
12902 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 456},
12904 #ifdef UA_ENABLE_TYPENAMES 12905 .typeName =
"SignatureData",
12909 .fixedSize =
false,
12910 .overlayable =
false,
12911 .binaryEncodingId = 458,
12913 .members = SignatureData_members },
12916 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 285},
12918 #ifdef UA_ENABLE_TYPENAMES 12919 .typeName =
"ReferenceNode",
12923 .fixedSize =
false,
12924 .overlayable =
false,
12925 .binaryEncodingId = 287,
12927 .members = ReferenceNode_members },
12930 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 296},
12932 #ifdef UA_ENABLE_TYPENAMES 12933 .typeName =
"Argument",
12937 .fixedSize =
false,
12938 .overlayable =
false,
12939 .binaryEncodingId = 298,
12941 .members = Argument_members },
12944 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 316},
12946 #ifdef UA_ENABLE_TYPENAMES 12947 .typeName =
"UserIdentityToken",
12951 .fixedSize =
false,
12952 .overlayable =
false,
12953 .binaryEncodingId = 318,
12955 .members = UserIdentityToken_members },
12958 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 361},
12960 #ifdef UA_ENABLE_TYPENAMES 12961 .typeName =
"ObjectTypeAttributes",
12965 .fixedSize =
false,
12966 .overlayable =
false,
12967 .binaryEncodingId = 363,
12969 .members = ObjectTypeAttributes_members },
12972 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12974 #ifdef UA_ENABLE_TYPENAMES 12975 .typeName =
"DeadbandType",
12981 .binaryEncodingId = 0,
12983 .members = DeadbandType_members },
12986 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12988 #ifdef UA_ENABLE_TYPENAMES 12989 .typeName =
"SecurityTokenRequestType",
12995 .binaryEncodingId = 0,
12997 .members = SecurityTokenRequestType_members },
13000 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13002 #ifdef UA_ENABLE_TYPENAMES 13003 .typeName =
"DataChangeTrigger",
13009 .binaryEncodingId = 0,
13011 .members = DataChangeTrigger_members },
13014 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 338},
13016 #ifdef UA_ENABLE_TYPENAMES 13017 .typeName =
"BuildInfo",
13021 .fixedSize =
false,
13022 .overlayable =
false,
13023 .binaryEncodingId = 340,
13025 .members = BuildInfo_members },
13028 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13030 #ifdef UA_ENABLE_TYPENAMES 13031 .typeName =
"NodeClass",
13037 .binaryEncodingId = 0,
13039 .members = NodeClass_members },
13042 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 441},
13044 #ifdef UA_ENABLE_TYPENAMES 13045 .typeName =
"ChannelSecurityToken",
13051 .binaryEncodingId = 443,
13053 .members = ChannelSecurityToken_members },
13056 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 806},
13058 #ifdef UA_ENABLE_TYPENAMES 13059 .typeName =
"MonitoredItemNotification",
13063 .fixedSize =
false,
13064 .overlayable =
false,
13065 .binaryEncodingId = 808,
13067 .members = MonitoredItemNotification_members },
13070 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 382},
13072 #ifdef UA_ENABLE_TYPENAMES 13073 .typeName =
"DeleteNodesItem",
13077 .fixedSize =
false,
13078 .overlayable =
false,
13079 .binaryEncodingId = 384,
13081 .members = DeleteNodesItem_members },
13084 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 821},
13086 #ifdef UA_ENABLE_TYPENAMES 13087 .typeName =
"SubscriptionAcknowledgement",
13093 .binaryEncodingId = 823,
13095 .members = SubscriptionAcknowledgement_members },
13098 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 626},
13100 #ifdef UA_ENABLE_TYPENAMES 13101 .typeName =
"ReadValueId",
13105 .fixedSize =
false,
13106 .overlayable =
false,
13107 .binaryEncodingId = 628,
13109 .members = ReadValueId_members },
13112 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 370},
13114 #ifdef UA_ENABLE_TYPENAMES 13115 .typeName =
"DataTypeAttributes",
13119 .fixedSize =
false,
13120 .overlayable =
false,
13121 .binaryEncodingId = 372,
13123 .members = DataTypeAttributes_members },
13126 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 392},
13128 #ifdef UA_ENABLE_TYPENAMES 13129 .typeName =
"ResponseHeader",
13133 .fixedSize =
false,
13134 .overlayable =
false,
13135 .binaryEncodingId = 394,
13137 .members = ResponseHeader_members },
13140 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 845},
13142 #ifdef UA_ENABLE_TYPENAMES 13143 .typeName =
"DeleteSubscriptionsRequest",
13147 .fixedSize =
false,
13148 .overlayable =
false,
13149 .binaryEncodingId = 847,
13151 .members = DeleteSubscriptionsRequest_members },
13154 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 511},
13156 #ifdef UA_ENABLE_TYPENAMES 13157 .typeName =
"ViewDescription",
13161 .fixedSize =
false,
13162 .overlayable =
false,
13163 .binaryEncodingId = 513,
13165 .members = ViewDescription_members },
13168 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 782},
13170 #ifdef UA_ENABLE_TYPENAMES 13171 .typeName =
"DeleteMonitoredItemsResponse",
13175 .fixedSize =
false,
13176 .overlayable =
false,
13177 .binaryEncodingId = 784,
13179 .members = DeleteMonitoredItemsResponse_members },
13182 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 349},
13184 #ifdef UA_ENABLE_TYPENAMES 13185 .typeName =
"NodeAttributes",
13189 .fixedSize =
false,
13190 .overlayable =
false,
13191 .binaryEncodingId = 351,
13193 .members = NodeAttributes_members },
13196 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 558},
13198 #ifdef UA_ENABLE_TYPENAMES 13199 .typeName =
"RegisterNodesRequest",
13203 .fixedSize =
false,
13204 .overlayable =
false,
13205 .binaryEncodingId = 560,
13207 .members = RegisterNodesRequest_members },
13210 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 498},
13212 #ifdef UA_ENABLE_TYPENAMES 13213 .typeName =
"DeleteNodesRequest",
13217 .fixedSize =
false,
13218 .overlayable =
false,
13219 .binaryEncodingId = 500,
13221 .members = DeleteNodesRequest_members },
13224 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 827},
13226 #ifdef UA_ENABLE_TYPENAMES 13227 .typeName =
"PublishResponse",
13231 .fixedSize =
false,
13232 .overlayable =
false,
13233 .binaryEncodingId = 829,
13235 .members = PublishResponse_members },
13238 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 755},
13240 #ifdef UA_ENABLE_TYPENAMES 13241 .typeName =
"MonitoredItemModifyRequest",
13245 .fixedSize =
false,
13246 .overlayable =
false,
13247 .binaryEncodingId = 757,
13249 .members = MonitoredItemModifyRequest_members },
13252 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 322},
13254 #ifdef UA_ENABLE_TYPENAMES 13255 .typeName =
"UserNameIdentityToken",
13259 .fixedSize =
false,
13260 .overlayable =
false,
13261 .binaryEncodingId = 324,
13263 .members = UserNameIdentityToken_members },
13266 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13268 #ifdef UA_ENABLE_TYPENAMES 13269 .typeName =
"IdType",
13275 .binaryEncodingId = 0,
13277 .members = IdType_members },
13280 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13282 #ifdef UA_ENABLE_TYPENAMES 13283 .typeName =
"UserTokenType",
13289 .binaryEncodingId = 0,
13291 .members = UserTokenType_members },
13294 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 465},
13296 #ifdef UA_ENABLE_TYPENAMES 13297 .typeName =
"ActivateSessionRequest",
13301 .fixedSize =
false,
13302 .overlayable =
false,
13303 .binaryEncodingId = 467,
13305 .members = ActivateSessionRequest_members },
13308 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 447},
13310 #ifdef UA_ENABLE_TYPENAMES 13311 .typeName =
"OpenSecureChannelResponse",
13315 .fixedSize =
false,
13316 .overlayable =
false,
13317 .binaryEncodingId = 449,
13319 .members = OpenSecureChannelResponse_members },
13322 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13324 #ifdef UA_ENABLE_TYPENAMES 13325 .typeName =
"ApplicationType",
13331 .binaryEncodingId = 0,
13333 .members = ApplicationType_members },
13336 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13338 #ifdef UA_ENABLE_TYPENAMES 13339 .typeName =
"ServerState",
13345 .binaryEncodingId = 0,
13347 .members = ServerState_members },
13350 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 622},
13352 #ifdef UA_ENABLE_TYPENAMES 13353 .typeName =
"QueryNextResponse",
13357 .fixedSize =
false,
13358 .overlayable =
false,
13359 .binaryEncodingId = 624,
13361 .members = QueryNextResponse_members },
13364 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 468},
13366 #ifdef UA_ENABLE_TYPENAMES 13367 .typeName =
"ActivateSessionResponse",
13371 .fixedSize =
false,
13372 .overlayable =
false,
13373 .binaryEncodingId = 470,
13375 .members = ActivateSessionResponse_members },
13378 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13380 #ifdef UA_ENABLE_TYPENAMES 13381 .typeName =
"FilterOperator",
13387 .binaryEncodingId = 0,
13389 .members = FilterOperator_members },
13392 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 619},
13394 #ifdef UA_ENABLE_TYPENAMES 13395 .typeName =
"QueryNextRequest",
13399 .fixedSize =
false,
13400 .overlayable =
false,
13401 .binaryEncodingId = 621,
13403 .members = QueryNextRequest_members },
13406 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 674},
13408 #ifdef UA_ENABLE_TYPENAMES 13409 .typeName =
"WriteResponse",
13413 .fixedSize =
false,
13414 .overlayable =
false,
13415 .binaryEncodingId = 676,
13417 .members = WriteResponse_members },
13420 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 531},
13422 #ifdef UA_ENABLE_TYPENAMES 13423 .typeName =
"BrowseNextRequest",
13427 .fixedSize =
false,
13428 .overlayable =
false,
13429 .binaryEncodingId = 533,
13431 .members = BrowseNextRequest_members },
13434 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 785},
13436 #ifdef UA_ENABLE_TYPENAMES 13437 .typeName =
"CreateSubscriptionRequest",
13441 .fixedSize =
false,
13442 .overlayable =
false,
13443 .binaryEncodingId = 787,
13445 .members = CreateSubscriptionRequest_members },
13448 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 364},
13450 #ifdef UA_ENABLE_TYPENAMES 13451 .typeName =
"VariableTypeAttributes",
13455 .fixedSize =
false,
13456 .overlayable =
false,
13457 .binaryEncodingId = 366,
13459 .members = VariableTypeAttributes_members },
13462 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 549},
13464 #ifdef UA_ENABLE_TYPENAMES 13465 .typeName =
"BrowsePathResult",
13469 .fixedSize =
false,
13470 .overlayable =
false,
13471 .binaryEncodingId = 551,
13473 .members = BrowsePathResult_members },
13476 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 794},
13478 #ifdef UA_ENABLE_TYPENAMES 13479 .typeName =
"ModifySubscriptionResponse",
13483 .fixedSize =
false,
13484 .overlayable =
false,
13485 .binaryEncodingId = 796,
13487 .members = ModifySubscriptionResponse_members },
13490 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 444},
13492 #ifdef UA_ENABLE_TYPENAMES 13493 .typeName =
"OpenSecureChannelRequest",
13497 .fixedSize =
false,
13498 .overlayable =
false,
13499 .binaryEncodingId = 446,
13501 .members = OpenSecureChannelRequest_members },
13504 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 561},
13506 #ifdef UA_ENABLE_TYPENAMES 13507 .typeName =
"RegisterNodesResponse",
13511 .fixedSize =
false,
13512 .overlayable =
false,
13513 .binaryEncodingId = 563,
13515 .members = RegisterNodesResponse_members },
13518 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 471},
13520 #ifdef UA_ENABLE_TYPENAMES 13521 .typeName =
"CloseSessionRequest",
13525 .fixedSize =
false,
13526 .overlayable =
false,
13527 .binaryEncodingId = 473,
13529 .members = CloseSessionRequest_members },
13532 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 791},
13534 #ifdef UA_ENABLE_TYPENAMES 13535 .typeName =
"ModifySubscriptionRequest",
13539 .fixedSize =
false,
13540 .overlayable =
false,
13541 .binaryEncodingId = 793,
13543 .members = ModifySubscriptionRequest_members },
13546 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 304},
13548 #ifdef UA_ENABLE_TYPENAMES 13549 .typeName =
"UserTokenPolicy",
13553 .fixedSize =
false,
13554 .overlayable =
false,
13555 .binaryEncodingId = 306,
13557 .members = UserTokenPolicy_members },
13560 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 779},
13562 #ifdef UA_ENABLE_TYPENAMES 13563 .typeName =
"DeleteMonitoredItemsRequest",
13567 .fixedSize =
false,
13568 .overlayable =
false,
13569 .binaryEncodingId = 781,
13571 .members = DeleteMonitoredItemsRequest_members },
13574 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 367},
13576 #ifdef UA_ENABLE_TYPENAMES 13577 .typeName =
"ReferenceTypeAttributes",
13581 .fixedSize =
false,
13582 .overlayable =
false,
13583 .binaryEncodingId = 369,
13585 .members = ReferenceTypeAttributes_members },
13588 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 767},
13590 #ifdef UA_ENABLE_TYPENAMES 13591 .typeName =
"SetMonitoringModeRequest",
13595 .fixedSize =
false,
13596 .overlayable =
false,
13597 .binaryEncodingId = 769,
13599 .members = SetMonitoringModeRequest_members },
13602 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 567},
13604 #ifdef UA_ENABLE_TYPENAMES 13605 .typeName =
"UnregisterNodesResponse",
13609 .fixedSize =
false,
13610 .overlayable =
false,
13611 .binaryEncodingId = 569,
13613 .members = UnregisterNodesResponse_members },
13616 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 671},
13618 #ifdef UA_ENABLE_TYPENAMES 13619 .typeName =
"WriteRequest",
13623 .fixedSize =
false,
13624 .overlayable =
false,
13625 .binaryEncodingId = 673,
13627 .members = WriteRequest_members },
13630 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 352},
13632 #ifdef UA_ENABLE_TYPENAMES 13633 .typeName =
"ObjectAttributes",
13637 .fixedSize =
false,
13638 .overlayable =
false,
13639 .binaryEncodingId = 354,
13641 .members = ObjectAttributes_members },
13644 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 514},
13646 #ifdef UA_ENABLE_TYPENAMES 13647 .typeName =
"BrowseDescription",
13651 .fixedSize =
false,
13652 .overlayable =
false,
13653 .binaryEncodingId = 516,
13655 .members = BrowseDescription_members },
13658 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 830},
13660 #ifdef UA_ENABLE_TYPENAMES 13661 .typeName =
"RepublishRequest",
13665 .fixedSize =
false,
13666 .overlayable =
false,
13667 .binaryEncodingId = 832,
13669 .members = RepublishRequest_members },
13672 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 426},
13674 #ifdef UA_ENABLE_TYPENAMES 13675 .typeName =
"GetEndpointsRequest",
13679 .fixedSize =
false,
13680 .overlayable =
false,
13681 .binaryEncodingId = 428,
13683 .members = GetEndpointsRequest_members },
13686 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 824},
13688 #ifdef UA_ENABLE_TYPENAMES 13689 .typeName =
"PublishRequest",
13693 .fixedSize =
false,
13694 .overlayable =
false,
13695 .binaryEncodingId = 826,
13697 .members = PublishRequest_members },
13700 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 489},
13702 #ifdef UA_ENABLE_TYPENAMES 13703 .typeName =
"AddNodesResponse",
13707 .fixedSize =
false,
13708 .overlayable =
false,
13709 .binaryEncodingId = 491,
13711 .members = AddNodesResponse_members },
13714 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 809},
13716 #ifdef UA_ENABLE_TYPENAMES 13717 .typeName =
"DataChangeNotification",
13721 .fixedSize =
false,
13722 .overlayable =
false,
13723 .binaryEncodingId = 811,
13725 .members = DataChangeNotification_members },
13728 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 453},
13730 #ifdef UA_ENABLE_TYPENAMES 13731 .typeName =
"CloseSecureChannelResponse",
13735 .fixedSize =
false,
13736 .overlayable =
false,
13737 .binaryEncodingId = 455,
13739 .members = CloseSecureChannelResponse_members },
13742 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 761},
13744 #ifdef UA_ENABLE_TYPENAMES 13745 .typeName =
"ModifyMonitoredItemsRequest",
13749 .fixedSize =
false,
13750 .overlayable =
false,
13751 .binaryEncodingId = 763,
13753 .members = ModifyMonitoredItemsRequest_members },
13756 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 770},
13758 #ifdef UA_ENABLE_TYPENAMES 13759 .typeName =
"SetMonitoringModeResponse",
13763 .fixedSize =
false,
13764 .overlayable =
false,
13765 .binaryEncodingId = 772,
13767 .members = SetMonitoringModeResponse_members },
13770 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 420},
13772 #ifdef UA_ENABLE_TYPENAMES 13773 .typeName =
"FindServersRequest",
13777 .fixedSize =
false,
13778 .overlayable =
false,
13779 .binaryEncodingId = 422,
13781 .members = FindServersRequest_members },
13784 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 518},
13786 #ifdef UA_ENABLE_TYPENAMES 13787 .typeName =
"ReferenceDescription",
13791 .fixedSize =
false,
13792 .overlayable =
false,
13793 .binaryEncodingId = 520,
13795 .members = ReferenceDescription_members },
13798 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 800},
13800 #ifdef UA_ENABLE_TYPENAMES 13801 .typeName =
"SetPublishingModeResponse",
13805 .fixedSize =
false,
13806 .overlayable =
false,
13807 .binaryEncodingId = 802,
13809 .members = SetPublishingModeResponse_members },
13812 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 607},
13814 #ifdef UA_ENABLE_TYPENAMES 13815 .typeName =
"ContentFilterResult",
13819 .fixedSize =
false,
13820 .overlayable =
false,
13821 .binaryEncodingId = 609,
13823 .members = ContentFilterResult_members },
13826 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 379},
13828 #ifdef UA_ENABLE_TYPENAMES 13829 .typeName =
"AddReferencesItem",
13833 .fixedSize =
false,
13834 .overlayable =
false,
13835 .binaryEncodingId = 381,
13837 .members = AddReferencesItem_members },
13840 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 788},
13842 #ifdef UA_ENABLE_TYPENAMES 13843 .typeName =
"CreateSubscriptionResponse",
13847 .fixedSize =
false,
13848 .overlayable =
false,
13849 .binaryEncodingId = 790,
13851 .members = CreateSubscriptionResponse_members },
13854 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 848},
13856 #ifdef UA_ENABLE_TYPENAMES 13857 .typeName =
"DeleteSubscriptionsResponse",
13861 .fixedSize =
false,
13862 .overlayable =
false,
13863 .binaryEncodingId = 850,
13865 .members = DeleteSubscriptionsResponse_members },
13868 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 540},
13870 #ifdef UA_ENABLE_TYPENAMES 13871 .typeName =
"RelativePath",
13875 .fixedSize =
false,
13876 .overlayable =
false,
13877 .binaryEncodingId = 542,
13879 .members = RelativePath_members },
13882 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 507},
13884 #ifdef UA_ENABLE_TYPENAMES 13885 .typeName =
"DeleteReferencesResponse",
13889 .fixedSize =
false,
13890 .overlayable =
false,
13891 .binaryEncodingId = 509,
13893 .members = DeleteReferencesResponse_members },
13896 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 752},
13898 #ifdef UA_ENABLE_TYPENAMES 13899 .typeName =
"CreateMonitoredItemsResponse",
13903 .fixedSize =
false,
13904 .overlayable =
false,
13905 .binaryEncodingId = 754,
13907 .members = CreateMonitoredItemsResponse_members },
13910 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 713},
13912 #ifdef UA_ENABLE_TYPENAMES 13913 .typeName =
"CallResponse",
13917 .fixedSize =
false,
13918 .overlayable =
false,
13919 .binaryEncodingId = 715,
13921 .members = CallResponse_members },
13924 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 501},
13926 #ifdef UA_ENABLE_TYPENAMES 13927 .typeName =
"DeleteNodesResponse",
13931 .fixedSize =
false,
13932 .overlayable =
false,
13933 .binaryEncodingId = 503,
13935 .members = DeleteNodesResponse_members },
13938 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 833},
13940 #ifdef UA_ENABLE_TYPENAMES 13941 .typeName =
"RepublishResponse",
13945 .fixedSize =
false,
13946 .overlayable =
false,
13947 .binaryEncodingId = 835,
13949 .members = RepublishResponse_members },
13952 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 743},
13954 #ifdef UA_ENABLE_TYPENAMES 13955 .typeName =
"MonitoredItemCreateRequest",
13959 .fixedSize =
false,
13960 .overlayable =
false,
13961 .binaryEncodingId = 745,
13963 .members = MonitoredItemCreateRequest_members },
13966 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 504},
13968 #ifdef UA_ENABLE_TYPENAMES 13969 .typeName =
"DeleteReferencesRequest",
13973 .fixedSize =
false,
13974 .overlayable =
false,
13975 .binaryEncodingId = 506,
13977 .members = DeleteReferencesRequest_members },
13980 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 764},
13982 #ifdef UA_ENABLE_TYPENAMES 13983 .typeName =
"ModifyMonitoredItemsResponse",
13987 .fixedSize =
false,
13988 .overlayable =
false,
13989 .binaryEncodingId = 766,
13991 .members = ModifyMonitoredItemsResponse_members },
13994 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 632},
13996 #ifdef UA_ENABLE_TYPENAMES 13997 .typeName =
"ReadResponse",
14001 .fixedSize =
false,
14002 .overlayable =
false,
14003 .binaryEncodingId = 634,
14005 .members = ReadResponse_members },
14008 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 492},
14010 #ifdef UA_ENABLE_TYPENAMES 14011 .typeName =
"AddReferencesRequest",
14015 .fixedSize =
false,
14016 .overlayable =
false,
14017 .binaryEncodingId = 494,
14019 .members = AddReferencesRequest_members },
14022 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 629},
14024 #ifdef UA_ENABLE_TYPENAMES 14025 .typeName =
"ReadRequest",
14029 .fixedSize =
false,
14030 .overlayable =
false,
14031 .binaryEncodingId = 631,
14033 .members = ReadRequest_members },
14036 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 376},
14038 #ifdef UA_ENABLE_TYPENAMES 14039 .typeName =
"AddNodesItem",
14043 .fixedSize =
false,
14044 .overlayable =
false,
14045 .binaryEncodingId = 378,
14047 .members = AddNodesItem_members },
14050 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 862},
14052 #ifdef UA_ENABLE_TYPENAMES 14053 .typeName =
"ServerStatusDataType",
14057 .fixedSize =
false,
14058 .overlayable =
false,
14059 .binaryEncodingId = 864,
14061 .members = ServerStatusDataType_members },
14064 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 495},
14066 #ifdef UA_ENABLE_TYPENAMES 14067 .typeName =
"AddReferencesResponse",
14071 .fixedSize =
false,
14072 .overlayable =
false,
14073 .binaryEncodingId = 497,
14075 .members = AddReferencesResponse_members },
14078 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 555},
14080 #ifdef UA_ENABLE_TYPENAMES 14081 .typeName =
"TranslateBrowsePathsToNodeIdsResponse",
14085 .fixedSize =
false,
14086 .overlayable =
false,
14087 .binaryEncodingId = 557,
14089 .members = TranslateBrowsePathsToNodeIdsResponse_members },
14092 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 722},
14094 #ifdef UA_ENABLE_TYPENAMES 14095 .typeName =
"DataChangeFilter",
14101 .binaryEncodingId = 724,
14103 .members = DataChangeFilter_members },
14106 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 583},
14108 #ifdef UA_ENABLE_TYPENAMES 14109 .typeName =
"ContentFilterElement",
14113 .fixedSize =
false,
14114 .overlayable =
false,
14115 .binaryEncodingId = 585,
14117 .members = ContentFilterElement_members },
14120 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 474},
14122 #ifdef UA_ENABLE_TYPENAMES 14123 .typeName =
"CloseSessionResponse",
14127 .fixedSize =
false,
14128 .overlayable =
false,
14129 .binaryEncodingId = 476,
14131 .members = CloseSessionResponse_members },
14134 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 308},
14136 #ifdef UA_ENABLE_TYPENAMES 14137 .typeName =
"ApplicationDescription",
14141 .fixedSize =
false,
14142 .overlayable =
false,
14143 .binaryEncodingId = 310,
14145 .members = ApplicationDescription_members },
14148 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 395},
14150 #ifdef UA_ENABLE_TYPENAMES 14151 .typeName =
"ServiceFault",
14155 .fixedSize =
false,
14156 .overlayable =
false,
14157 .binaryEncodingId = 397,
14159 .members = ServiceFault_members },
14162 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 423},
14164 #ifdef UA_ENABLE_TYPENAMES 14165 .typeName =
"FindServersResponse",
14169 .fixedSize =
false,
14170 .overlayable =
false,
14171 .binaryEncodingId = 425,
14173 .members = FindServersResponse_members },
14176 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 749},
14178 #ifdef UA_ENABLE_TYPENAMES 14179 .typeName =
"CreateMonitoredItemsRequest",
14183 .fixedSize =
false,
14184 .overlayable =
false,
14185 .binaryEncodingId = 751,
14187 .members = CreateMonitoredItemsRequest_members },
14190 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 586},
14192 #ifdef UA_ENABLE_TYPENAMES 14193 .typeName =
"ContentFilter",
14197 .fixedSize =
false,
14198 .overlayable =
false,
14199 .binaryEncodingId = 588,
14201 .members = ContentFilter_members },
14204 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 616},
14206 #ifdef UA_ENABLE_TYPENAMES 14207 .typeName =
"QueryFirstResponse",
14211 .fixedSize =
false,
14212 .overlayable =
false,
14213 .binaryEncodingId = 618,
14215 .members = QueryFirstResponse_members },
14218 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 486},
14220 #ifdef UA_ENABLE_TYPENAMES 14221 .typeName =
"AddNodesRequest",
14225 .fixedSize =
false,
14226 .overlayable =
false,
14227 .binaryEncodingId = 488,
14229 .members = AddNodesRequest_members },
14232 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 525},
14234 #ifdef UA_ENABLE_TYPENAMES 14235 .typeName =
"BrowseRequest",
14239 .fixedSize =
false,
14240 .overlayable =
false,
14241 .binaryEncodingId = 527,
14243 .members = BrowseRequest_members },
14246 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 543},
14248 #ifdef UA_ENABLE_TYPENAMES 14249 .typeName =
"BrowsePath",
14253 .fixedSize =
false,
14254 .overlayable =
false,
14255 .binaryEncodingId = 545,
14257 .members = BrowsePath_members },
14260 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 522},
14262 #ifdef UA_ENABLE_TYPENAMES 14263 .typeName =
"BrowseResult",
14267 .fixedSize =
false,
14268 .overlayable =
false,
14269 .binaryEncodingId = 524,
14271 .members = BrowseResult_members },
14274 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 459},
14276 #ifdef UA_ENABLE_TYPENAMES 14277 .typeName =
"CreateSessionRequest",
14281 .fixedSize =
false,
14282 .overlayable =
false,
14283 .binaryEncodingId = 461,
14285 .members = CreateSessionRequest_members },
14288 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 570},
14290 #ifdef UA_ENABLE_TYPENAMES 14291 .typeName =
"QueryDataDescription",
14295 .fixedSize =
false,
14296 .overlayable =
false,
14297 .binaryEncodingId = 572,
14299 .members = QueryDataDescription_members },
14302 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 312},
14304 #ifdef UA_ENABLE_TYPENAMES 14305 .typeName =
"EndpointDescription",
14309 .fixedSize =
false,
14310 .overlayable =
false,
14311 .binaryEncodingId = 314,
14313 .members = EndpointDescription_members },
14316 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 429},
14318 #ifdef UA_ENABLE_TYPENAMES 14319 .typeName =
"GetEndpointsResponse",
14323 .fixedSize =
false,
14324 .overlayable =
false,
14325 .binaryEncodingId = 431,
14327 .members = GetEndpointsResponse_members },
14330 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 573},
14332 #ifdef UA_ENABLE_TYPENAMES 14333 .typeName =
"NodeTypeDescription",
14337 .fixedSize =
false,
14338 .overlayable =
false,
14339 .binaryEncodingId = 575,
14341 .members = NodeTypeDescription_members },
14344 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 534},
14346 #ifdef UA_ENABLE_TYPENAMES 14347 .typeName =
"BrowseNextResponse",
14351 .fixedSize =
false,
14352 .overlayable =
false,
14353 .binaryEncodingId = 536,
14355 .members = BrowseNextResponse_members },
14358 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 552},
14360 #ifdef UA_ENABLE_TYPENAMES 14361 .typeName =
"TranslateBrowsePathsToNodeIdsRequest",
14365 .fixedSize =
false,
14366 .overlayable =
false,
14367 .binaryEncodingId = 554,
14369 .members = TranslateBrowsePathsToNodeIdsRequest_members },
14372 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 528},
14374 #ifdef UA_ENABLE_TYPENAMES 14375 .typeName =
"BrowseResponse",
14379 .fixedSize =
false,
14380 .overlayable =
false,
14381 .binaryEncodingId = 530,
14383 .members = BrowseResponse_members },
14386 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 462},
14388 #ifdef UA_ENABLE_TYPENAMES 14389 .typeName =
"CreateSessionResponse",
14393 .fixedSize =
false,
14394 .overlayable =
false,
14395 .binaryEncodingId = 464,
14397 .members = CreateSessionResponse_members },
14400 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 613},
14402 #ifdef UA_ENABLE_TYPENAMES 14403 .typeName =
"QueryFirstRequest",
14407 .fixedSize =
false,
14408 .overlayable =
false,
14409 .binaryEncodingId = 615,
14411 .members = QueryFirstRequest_members },
14424 #ifdef UA_ENABLE_TYPENAMES 14425 .memberName =
"error",
14427 .namespaceZero =
true,
14432 #ifdef UA_ENABLE_TYPENAMES 14433 .memberName =
"reason",
14435 .namespaceZero =
true,
14443 #ifdef UA_ENABLE_TYPENAMES 14444 .memberName =
"padding",
14446 .namespaceZero =
true,
14451 #ifdef UA_ENABLE_TYPENAMES 14452 .memberName =
"signature",
14454 .namespaceZero =
true,
14462 #ifdef UA_ENABLE_TYPENAMES 14463 .memberName =
"protocolVersion",
14465 .namespaceZero =
true,
14470 #ifdef UA_ENABLE_TYPENAMES 14471 .memberName =
"receiveBufferSize",
14473 .namespaceZero =
true,
14478 #ifdef UA_ENABLE_TYPENAMES 14479 .memberName =
"sendBufferSize",
14481 .namespaceZero =
true,
14486 #ifdef UA_ENABLE_TYPENAMES 14487 .memberName =
"maxMessageSize",
14489 .namespaceZero =
true,
14494 #ifdef UA_ENABLE_TYPENAMES 14495 .memberName =
"maxChunkCount",
14497 .namespaceZero =
true,
14502 #ifdef UA_ENABLE_TYPENAMES 14503 .memberName =
"endpointUrl",
14505 .namespaceZero =
true,
14513 #ifdef UA_ENABLE_TYPENAMES 14514 .memberName =
"error",
14516 .namespaceZero =
true,
14521 #ifdef UA_ENABLE_TYPENAMES 14522 .memberName =
"reason",
14524 .namespaceZero =
true,
14532 #ifdef UA_ENABLE_TYPENAMES 14535 .namespaceZero =
true,
14543 #ifdef UA_ENABLE_TYPENAMES 14544 .memberName =
"securityPolicyUri",
14546 .namespaceZero =
true,
14551 #ifdef UA_ENABLE_TYPENAMES 14552 .memberName =
"senderCertificate",
14554 .namespaceZero =
true,
14559 #ifdef UA_ENABLE_TYPENAMES 14560 .memberName =
"receiverCertificateThumbprint",
14562 .namespaceZero =
true,
14570 #ifdef UA_ENABLE_TYPENAMES 14571 .memberName =
"protocolVersion",
14573 .namespaceZero =
true,
14578 #ifdef UA_ENABLE_TYPENAMES 14579 .memberName =
"receiveBufferSize",
14581 .namespaceZero =
true,
14586 #ifdef UA_ENABLE_TYPENAMES 14587 .memberName =
"sendBufferSize",
14589 .namespaceZero =
true,
14594 #ifdef UA_ENABLE_TYPENAMES 14595 .memberName =
"maxMessageSize",
14597 .namespaceZero =
true,
14602 #ifdef UA_ENABLE_TYPENAMES 14603 .memberName =
"maxChunkCount",
14605 .namespaceZero =
true,
14613 #ifdef UA_ENABLE_TYPENAMES 14614 .memberName =
"sequenceNumber",
14616 .namespaceZero =
true,
14621 #ifdef UA_ENABLE_TYPENAMES 14622 .memberName =
"requestId",
14624 .namespaceZero =
true,
14632 #ifdef UA_ENABLE_TYPENAMES 14633 .memberName =
"messageTypeAndChunkType",
14635 .namespaceZero =
true,
14640 #ifdef UA_ENABLE_TYPENAMES 14641 .memberName =
"messageSize",
14643 .namespaceZero =
true,
14651 #ifdef UA_ENABLE_TYPENAMES 14654 .namespaceZero =
true,
14662 #ifdef UA_ENABLE_TYPENAMES 14663 .memberName =
"tokenId",
14665 .namespaceZero =
true,
14673 #ifdef UA_ENABLE_TYPENAMES 14674 .memberName =
"messageHeader",
14676 .namespaceZero =
false,
14681 #ifdef UA_ENABLE_TYPENAMES 14682 .memberName =
"secureChannelId",
14684 .namespaceZero =
true,
14693 #ifdef UA_ENABLE_TYPENAMES 14694 .typeName =
"SecureConversationMessageAbortBody",
14698 .fixedSize =
false,
14699 .overlayable =
false,
14700 .binaryEncodingId = 0,
14702 .members = SecureConversationMessageAbortBody_members },
14705 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14707 #ifdef UA_ENABLE_TYPENAMES 14708 .typeName =
"SecureConversationMessageFooter",
14712 .fixedSize =
false,
14713 .overlayable =
false,
14714 .binaryEncodingId = 0,
14716 .members = SecureConversationMessageFooter_members },
14719 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14721 #ifdef UA_ENABLE_TYPENAMES 14722 .typeName =
"TcpHelloMessage",
14726 .fixedSize =
false,
14727 .overlayable =
false,
14728 .binaryEncodingId = 0,
14730 .members = TcpHelloMessage_members },
14733 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14735 #ifdef UA_ENABLE_TYPENAMES 14736 .typeName =
"TcpErrorMessage",
14740 .fixedSize =
false,
14741 .overlayable =
false,
14742 .binaryEncodingId = 0,
14744 .members = TcpErrorMessage_members },
14747 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14749 #ifdef UA_ENABLE_TYPENAMES 14750 .typeName =
"MessageType",
14756 .binaryEncodingId = 0,
14758 .members = MessageType_members },
14761 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14763 #ifdef UA_ENABLE_TYPENAMES 14764 .typeName =
"AsymmetricAlgorithmSecurityHeader",
14768 .fixedSize =
false,
14769 .overlayable =
false,
14770 .binaryEncodingId = 0,
14772 .members = AsymmetricAlgorithmSecurityHeader_members },
14775 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14777 #ifdef UA_ENABLE_TYPENAMES 14778 .typeName =
"TcpAcknowledgeMessage",
14784 .binaryEncodingId = 0,
14786 .members = TcpAcknowledgeMessage_members },
14789 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14791 #ifdef UA_ENABLE_TYPENAMES 14792 .typeName =
"SequenceHeader",
14798 .binaryEncodingId = 0,
14800 .members = SequenceHeader_members },
14803 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14805 #ifdef UA_ENABLE_TYPENAMES 14806 .typeName =
"TcpMessageHeader",
14812 .binaryEncodingId = 0,
14814 .members = TcpMessageHeader_members },
14817 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14819 #ifdef UA_ENABLE_TYPENAMES 14820 .typeName =
"ChunkType",
14826 .binaryEncodingId = 0,
14828 .members = ChunkType_members },
14831 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14833 #ifdef UA_ENABLE_TYPENAMES 14834 .typeName =
"SymmetricAlgorithmSecurityHeader",
14840 .binaryEncodingId = 0,
14842 .members = SymmetricAlgorithmSecurityHeader_members },
14845 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14847 #ifdef UA_ENABLE_TYPENAMES 14848 .typeName =
"SecureConversationMessageHeader",
14854 .binaryEncodingId = 0,
14856 .members = SecureConversationMessageHeader_members },
14887 message->
data = data;
14888 message->
length = length;
14894 size_t complete_until = 0;
14896 while(message->
length - complete_until >= 8) {
14901 if(msgtype != (
'M' + (
'S' << 8) + (
'G' << 16)) &&
14902 msgtype != (
'E' + (
'R' << 8) + (
'R' << 16)) &&
14903 msgtype != (
'O' + (
'P' << 8) + (
'N' << 16)) &&
14904 msgtype != (
'H' + (
'E' << 8) + (
'L' << 16)) &&
14905 msgtype != (
'A' + (
'C' << 8) + (
'K' << 16)) &&
14906 msgtype != (
'C' + (
'L' << 8) + (
'O' << 16))) {
14907 garbage_end =
true;
14913 size_t length_pos = complete_until + 4;
14914 UA_StatusCode decode_retval = UA_UInt32_decodeBinary(message, &length_pos, &chunk_length);
14918 chunk_length < 16 ||
14920 garbage_end =
true;
14925 if(chunk_length + complete_until > message->
length)
14928 complete_until += chunk_length;
14932 if(complete_until != message->
length) {
14935 if(complete_until == 0)
14937 message->
length = complete_until;
14942 if(complete_until == 0) {
14958 size_t incomplete_length = message->
length - complete_until;
14963 &message->
data[complete_until], incomplete_length);
14964 message->
length = complete_until;
14981 *realloced =
false;
14986 retval = connection->
recv(connection, chunks, timeout);
15008 UA_atomic_cmpxchg((
void**)&channel->
connection, connection,
NULL);
15009 UA_atomic_xchg((
void**)&connection->
channel,
NULL);
15017 UA_atomic_xchg((
void**)&connection->
channel, (
void*)channel);
15022 const char ** port,
const char **path) {
15023 if (!endpointUrl || !hostname)
15026 size_t urlLength = strlen(endpointUrl);
15027 if(urlLength < 10 || urlLength >= 256)
15030 if(strncmp(endpointUrl,
"opc.tcp://", 10) != 0)
15033 if (urlLength == 10) {
15034 hostname[0] =
'\0';
15040 size_t portpos = 10;
15043 UA_Boolean ip6_end_found = endpointUrl[portpos] !=
'[';
15044 for(; portpos < urlLength; ++portpos) {
15045 if (!ip6_end_found) {
15046 if (endpointUrl[portpos] ==
']')
15051 if(endpointUrl[portpos] ==
':' || endpointUrl[portpos] ==
'/')
15055 memcpy(hostname, &endpointUrl[10], portpos - 10);
15056 hostname[portpos-10] = 0;
15059 if (portpos < urlLength - 1) {
15060 if (endpointUrl[portpos] ==
'/')
15063 *port = &endpointUrl[portpos + 1];
15070 size_t pathpos = portpos < urlLength ? portpos : 10;
15071 for(; pathpos < urlLength; ++pathpos) {
15072 if(endpointUrl[pathpos] ==
'/')
15075 if (pathpos < urlLength-1)
15076 *path = &endpointUrl[pathpos+1];
15087 UA_UInt16 * port,
const char ** path) {
15088 const char* portTmp =
NULL;
15089 const char* pathTmp =
NULL;
15093 hostname[0] =
'\0';
15104 portLen = (size_t)(pathTmp-portTmp-1);
15106 portLen = strlen(portTmp);
15111 memcpy(portStr, portTmp, portLen);
15112 portStr[portLen]=
'\0';
15115 for (
size_t i=0; i<6; ++i) {
15116 if (portStr[i] == 0)
15118 if (portStr[i] <
'0' || portStr[i] >
'9')
15141 size_t progress = 0;
15143 while(progress < buflen) {
15145 if(
'0' > c ||
'9' < c)
15161 #define UA_SECURE_MESSAGE_HEADER_LENGTH 24 15173 UA_ByteString_deleteMembers(&channel->
serverNonce);
15175 UA_ByteString_deleteMembers(&channel->
clientNonce);
15176 UA_ChannelSecurityToken_deleteMembers(&channel->
securityToken);
15187 se->session->channel =
NULL;
15195 UA_ByteString_deleteMembers(&ch->bytes);
15206 nonce->
data[0] =
'a';
15210 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) 15211 #pragma GCC diagnostic push 15212 #pragma GCC diagnostic ignored "-Wextra" 15213 #pragma GCC diagnostic ignored "-Wcast-qual" 15214 #pragma GCC diagnostic ignored "-Wunused-value" 15221 se->session = session;
15222 if(UA_atomic_cmpxchg((
void**)&session->
channel,
NULL, channel) !=
NULL) {
15229 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) 15230 #pragma GCC diagnostic pop 15238 if(se->session == session)
15255 return se->session;
15305 UA_String_init(&errorMsg);
15307 UA_UInt32_encodeBinary(&ci->
errorCode, dst, &offset);
15308 UA_String_encodeBinary(&errorMsg, dst, &offset);
15319 size_t offset_header = 0;
15320 UA_SecureConversationMessageHeader_encodeBinary(&respHeader, dst, &offset_header);
15321 UA_SymmetricAlgorithmSecurityHeader_encodeBinary(&symSecHeader, dst, &offset_header);
15322 UA_SequenceHeader_encodeBinary(&seqHeader, dst, &offset_header);
15345 const void *content,
const UA_DataType *contentType) {
15362 size_t messagePos = 0;
15365 UA_NodeId_encodeBinary(&typeId, &message, &messagePos);
15382 &ci, &message, &messagePos);
15389 UA_SecureChannel_sendChunk(&ci, &message, messagePos);
15396 return UA_SecureChannel_sendChunk(&ci, &message, messagePos);
15407 if(ch->requestId == requestId) {
15408 UA_ByteString_deleteMembers(&ch->bytes);
15419 size_t offset,
size_t chunklength) {
15420 UA_Byte* new_bytes =
UA_realloc(ch->bytes.data, ch->bytes.length + chunklength);
15422 UA_ByteString_deleteMembers(&ch->bytes);
15425 ch->bytes.data = new_bytes;
15426 memcpy(&ch->bytes.data[ch->bytes.length], &msg->
data[offset], chunklength);
15427 ch->bytes.length += chunklength;
15433 size_t chunklength) {
15435 if(msg->
length - offset < chunklength) {
15437 UA_SecureChannel_removeChunk(channel, requestId);
15444 if(ch->requestId == requestId)
15453 ch->requestId = requestId;
15454 UA_ByteString_init(&ch->bytes);
15458 appendChunk(ch, msg, offset, chunklength);
15464 size_t chunklength,
UA_Boolean *deleteChunk) {
15465 if(msg->
length - offset < chunklength) {
15467 UA_SecureChannel_removeChunk(channel, requestId);
15473 if(ch->requestId == requestId)
15479 *deleteChunk =
false;
15480 bytes.
length = chunklength;
15483 *deleteChunk =
true;
15484 appendChunk(ch, msg, offset, chunklength);
15512 if (chunks->
length > 3 && chunks->
data[offset] ==
'E' &&
15513 chunks->
data[offset+1] ==
'R' && chunks->
data[offset+2] ==
'R') {
15515 retval = UA_TcpMessageHeader_decodeBinary(chunks, &offset, &header);
15520 retval = UA_TcpErrorMessage_decodeBinary(chunks, &offset, &errorMessage);
15529 size_t initial_offset = offset;
15533 retval = UA_SecureConversationMessageHeader_decodeBinary(chunks, &offset, &header);
15546 UA_SequenceHeader_init(&sequenceHeader);
15551 retval |= UA_UInt32_decodeBinary(chunks, &offset, &tokenId);
15552 retval |= UA_SequenceHeader_decodeBinary(chunks, &offset, &sequenceHeader);
15564 retval = UA_SecureChannel_processSequenceNumber(channel, sequenceHeader.
sequenceNumber);
15570 size_t processed_header = offset - initial_offset;
15573 UA_SecureChannel_appendChunk(channel, sequenceHeader.
requestId, chunks, offset,
15579 UA_SecureChannel_finalizeChunk(channel, sequenceHeader.
requestId, chunks, offset,
15582 if(message.
length > 0) {
15586 UA_ByteString_deleteMembers(&message);
15590 UA_SecureChannel_removeChunk(channel, sequenceHeader.
requestId);
15598 }
while(chunks->
length > offset);
15609 #ifdef UA_ENABLE_SUBSCRIPTIONS 15612 UA_Session adminSession = {
15614 .applicationName = {.locale = {0,
NULL}, .text = {0,
NULL}},
15616 .gatewayServerUri = {0,
NULL}, .discoveryProfileUri = {0,
NULL},
15617 .discoveryUrlsSize = 0, .discoveryUrls =
NULL},
15618 .sessionName = {
sizeof(
"Administrator Session")-1, (
UA_Byte*)
"Administrator Session"},
15620 .identifier.numeric = 1},
15621 .sessionId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 1},
15624 .continuationPoints = {
NULL}};
15638 LIST_INIT(&session->continuationPoints);
15639 #ifdef UA_ENABLE_SUBSCRIPTIONS 15640 LIST_INIT(&session->serverSubscriptions);
15641 session->lastSubscriptionID = 0;
15649 UA_NodeId_deleteMembers(&session->
sessionId);
15654 UA_ByteString_deleteMembers(&cp->identifier);
15655 UA_BrowseDescription_deleteMembers(&cp->browseDescription);
15660 #ifdef UA_ENABLE_SUBSCRIPTIONS 15667 UA_PublishResponseEntry *entry;
15670 UA_PublishResponse_deleteMembers(&entry->response);
15681 #ifdef UA_ENABLE_SUBSCRIPTIONS 15683 void UA_Session_addSubscription(UA_Session *session,
UA_Subscription *newSubscription) {
15684 LIST_INSERT_HEAD(&session->serverSubscriptions, newSubscription, listEntry);
15688 UA_Session_deleteSubscription(UA_Server *server, UA_Session *session,
15690 UA_Subscription *sub = UA_Session_getSubscriptionByID(session, subscriptionID);
15700 UA_Session_getSubscriptionByID(UA_Session *session,
UA_UInt32 subscriptionID) {
15702 LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
15703 if(sub->subscriptionID == subscriptionID)
15709 UA_UInt32 UA_Session_getUniqueSubscriptionID(UA_Session *session) {
15710 return ++(session->lastSubscriptionID);
15722 #ifdef UA_ENABLE_GENERATE_NAMESPACE0 15725 #ifdef UA_ENABLE_SUBSCRIPTIONS 15728 #if defined(UA_ENABLE_MULTITHREADING) && !defined(NDEBUG) 15732 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 15736 static const UA_NodeId nodeIdHasSubType = {
15739 static const UA_NodeId nodeIdHasComponent = {
15742 static const UA_NodeId nodeIdHasProperty = {
15745 static const UA_NodeId nodeIdOrganizes = {
15749 #ifndef UA_ENABLE_GENERATE_NAMESPACE0 15750 static const UA_NodeId nodeIdNonHierarchicalReferences = {
15782 .data = (
UA_Byte*)(uintptr_t)name};
15802 size_t refssize = parent->referencesSize;
15810 for(
size_t i = parent->referencesSize; i > 0; --i) {
15822 addNodeInternal(UA_Server *server, UA_Node *node,
const UA_NodeId parentNodeId,
15825 UA_AddNodesResult_init(&res);
15828 &referenceTypeId, &UA_NODEID_NULL,
15835 addNodeInternalWithType(UA_Server *server, UA_Node *node,
const UA_NodeId parentNodeId,
15838 UA_AddNodesResult_init(&res);
15841 &referenceTypeId, &typeIdentifier,
15849 deleteInstanceChildren(UA_Server *server,
UA_NodeId *objectNodeId) {
15852 UA_BrowseDescription_init(&bDes);
15853 bDes.
nodeId = *objectNodeId;
15866 true, rd->
nodeId,
true);
15870 UA_BrowseResult_deleteMembers(&bRes);
15892 #ifdef UA_ENABLE_MULTITHREADING 15893 pthread_cond_destroy(&server->dispatchQueue_condition);
15894 pthread_mutex_destroy(&server->dispatchQueue_mutex);
15900 static void UA_Server_cleanup(UA_Server *server,
void *_) {
15915 UA_Server *server = (UA_Server*)handle;
15921 UA_BuildInfo_copy(&server->config.buildInfo, &retval->
buildInfo);
15929 if(sourceTimeStamp) {
15948 UA_Byte *byte = UA_Byte_new();
15954 if(sourceTimeStamp) {
15979 if(sourceTimeStamp) {
15994 UA_Server *server = (UA_Server*)handle;
16001 if(sourceTimestamp) {
16011 UA_Server *server = (UA_Server*)handle;
16029 if(newNamespacesSize <= server->namespacesSize)
16039 for(
size_t i = server->
namespacesSize; i < newNamespacesSize; ++i)
16058 if(sourceTimeStamp) {
16065 static void copyNames(UA_Node *node,
char *name) {
16066 node->browseName = UA_QUALIFIEDNAME_ALLOC(0, name);
16067 node->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US", name);
16068 node->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US", name);
16072 addDataTypeNode(UA_Server *server,
char* name,
UA_UInt32 datatypeid,
16075 copyNames((UA_Node*)datatype, name);
16076 datatype->nodeId.identifier.numeric = datatypeid;
16077 datatype->isAbstract = isAbstract;
16078 addNodeInternal(server, (UA_Node*)datatype,
16079 UA_NODEID_NUMERIC(0, parent), nodeIdHasSubType);
16083 addObjectTypeNode(UA_Server *server,
char* name,
UA_UInt32 objecttypeid,
16086 copyNames((UA_Node*)objecttype, name);
16087 objecttype->nodeId.identifier.numeric = objecttypeid;
16088 addNodeInternal(server, (UA_Node*)objecttype, UA_NODEID_NUMERIC(0, parent),
16089 UA_NODEID_NUMERIC(0, parentreference));
16093 createVariableTypeNode(UA_Server *server,
char* name,
UA_UInt32 variabletypeid,
16096 copyNames((UA_Node*)variabletype, name);
16097 variabletype->nodeId.identifier.numeric = variabletypeid;
16098 variabletype->isAbstract =
abstract;
16099 return variabletype;
16102 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 16104 GetMonitoredItems(
void *handle,
const UA_NodeId objectId,
size_t inputSize,
16107 UA_Session* session = methodCallSession;
16108 UA_Subscription* subscription = UA_Session_getSubscriptionByID(session, subscriptionId);
16114 LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
16117 if(sizeOfOutput==0)
16123 LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
16124 clientHandles[i] = monitoredItem->clientHandle;
16125 serverHandles[i] = monitoredItem->itemId;
16128 UA_Variant_setArray(&output[0], clientHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
16129 UA_Variant_setArray(&output[1], serverHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
16135 UA_Server *server =
UA_calloc(1,
sizeof(UA_Server));
16139 server->config = config;
16143 #ifdef UA_ENABLE_MULTITHREADING 16145 cds_wfcq_init(&server->dispatchQueue_head, &server->dispatchQueue_tail);
16146 cds_lfs_init(&server->mainLoopJobs);
16151 #ifndef UA_ENABLE_DETERMINISTIC_RNG 16158 UA_String_copy(&server->config.applicationDescription.applicationUri, &server->
namespaces[1]);
16165 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
16171 UA_STRING_ALLOC(
"http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary");
16173 size_t policies = 0;
16174 if(server->config.enableAnonymousLogin)
16176 if(server->config.enableUsernamePasswordLogin)
16181 size_t currentIndex = 0;
16182 if(server->config.enableAnonymousLogin) {
16188 if(server->config.enableUsernamePasswordLogin) {
16197 UA_String_copy(&server->config.serverCertificate, &endpoint->
serverCertificate);
16198 UA_ApplicationDescription_copy(&server->config.applicationDescription, &endpoint->
server);
16207 UA_Job cleanup = {.
type = UA_JOBTYPE_METHODCALL,
16213 #ifndef UA_ENABLE_GENERATE_NAMESPACE0 16220 copyNames((UA_Node*)references,
"References");
16222 references->isAbstract =
true;
16223 references->symmetric =
true;
16224 references->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"References");
16227 copyNames((UA_Node*)hassubtype,
"HasSubtype");
16228 hassubtype->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"HasSupertype");
16230 hassubtype->isAbstract =
false;
16231 hassubtype->symmetric =
false;
16239 copyNames((UA_Node*)hierarchicalreferences,
"HierarchicalReferences");
16241 hierarchicalreferences->isAbstract =
true;
16242 hierarchicalreferences->symmetric =
false;
16243 addNodeInternal(server, (UA_Node*)hierarchicalreferences,
16247 copyNames((UA_Node*)nonhierarchicalreferences,
"NonHierarchicalReferences");
16249 nonhierarchicalreferences->isAbstract =
true;
16250 nonhierarchicalreferences->symmetric =
false;
16251 addNodeInternal(server, (UA_Node*)nonhierarchicalreferences,
16255 copyNames((UA_Node*)haschild,
"HasChild");
16257 haschild->isAbstract =
false;
16258 haschild->symmetric =
false;
16259 addNodeInternal(server, (UA_Node*)haschild,
16263 copyNames((UA_Node*)organizes,
"Organizes");
16264 organizes->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OrganizedBy");
16266 organizes->isAbstract =
false;
16267 organizes->symmetric =
false;
16268 addNodeInternal(server, (UA_Node*)organizes,
16272 copyNames((UA_Node*)haseventsource,
"HasEventSource");
16273 haseventsource->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"EventSourceOf");
16275 haseventsource->isAbstract =
false;
16276 haseventsource->symmetric =
false;
16277 addNodeInternal(server, (UA_Node*)haseventsource,
16281 copyNames((UA_Node*)hasmodellingrule,
"HasModellingRule");
16282 hasmodellingrule->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ModellingRuleOf");
16284 hasmodellingrule->isAbstract =
false;
16285 hasmodellingrule->symmetric =
false;
16286 addNodeInternal(server, (UA_Node*)hasmodellingrule, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16289 copyNames((UA_Node*)hasencoding,
"HasEncoding");
16290 hasencoding->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"EncodingOf");
16292 hasencoding->isAbstract =
false;
16293 hasencoding->symmetric =
false;
16294 addNodeInternal(server, (UA_Node*)hasencoding, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16297 copyNames((UA_Node*)hasdescription,
"HasDescription");
16298 hasdescription->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"DescriptionOf");
16300 hasdescription->isAbstract =
false;
16301 hasdescription->symmetric =
false;
16302 addNodeInternal(server, (UA_Node*)hasdescription, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16305 copyNames((UA_Node*)hastypedefinition,
"HasTypeDefinition");
16306 hastypedefinition->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"TypeDefinitionOf");
16308 hastypedefinition->isAbstract =
false;
16309 hastypedefinition->symmetric =
false;
16310 addNodeInternal(server, (UA_Node*)hastypedefinition, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16313 copyNames((UA_Node*)generatesevent,
"GeneratesEvent");
16314 generatesevent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"GeneratedBy");
16316 generatesevent->isAbstract =
false;
16317 generatesevent->symmetric =
false;
16318 addNodeInternal(server, (UA_Node*)generatesevent, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16321 copyNames((UA_Node*)aggregates,
"Aggregates");
16322 aggregates->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"AggregatedBy");
16324 aggregates->isAbstract =
false;
16325 aggregates->symmetric =
false;
16326 addNodeInternal(server, (UA_Node*)aggregates, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASCHILD), nodeIdHasSubType);
16333 copyNames((UA_Node*)hasproperty,
"HasProperty");
16334 hasproperty->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"PropertyOf");
16336 hasproperty->isAbstract =
false;
16337 hasproperty->symmetric =
false;
16338 addNodeInternal(server, (UA_Node*)hasproperty,
16342 copyNames((UA_Node*)hascomponent,
"HasComponent");
16343 hascomponent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ComponentOf");
16345 hascomponent->isAbstract =
false;
16346 hascomponent->symmetric =
false;
16347 addNodeInternal(server, (UA_Node*)hascomponent, UA_NODEID_NUMERIC(0,
UA_NS0ID_AGGREGATES), nodeIdHasSubType);
16350 copyNames((UA_Node*)hasnotifier,
"HasNotifier");
16351 hasnotifier->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"NotifierOf");
16353 hasnotifier->isAbstract =
false;
16354 hasnotifier->symmetric =
false;
16355 addNodeInternal(server, (UA_Node*)hasnotifier, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASEVENTSOURCE), nodeIdHasSubType);
16358 copyNames((UA_Node*)hasorderedcomponent,
"HasOrderedComponent");
16359 hasorderedcomponent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OrderedComponentOf");
16361 hasorderedcomponent->isAbstract =
false;
16362 hasorderedcomponent->symmetric =
false;
16363 addNodeInternal(server, (UA_Node*)hasorderedcomponent, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASCOMPONENT), nodeIdHasSubType);
16366 copyNames((UA_Node*)hasmodelparent,
"HasModelParent");
16367 hasmodelparent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ModelParentOf");
16369 hasmodelparent->isAbstract =
false;
16370 hasmodelparent->symmetric =
false;
16371 addNodeInternal(server, (UA_Node*)hasmodelparent, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16374 copyNames((UA_Node*)fromstate,
"FromState");
16375 fromstate->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ToTransition");
16377 fromstate->isAbstract =
false;
16378 fromstate->symmetric =
false;
16379 addNodeInternal(server, (UA_Node*)fromstate, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16382 copyNames((UA_Node*)tostate,
"ToState");
16383 tostate->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"FromTransition");
16385 tostate->isAbstract =
false;
16386 tostate->symmetric =
false;
16387 addNodeInternal(server, (UA_Node*)tostate, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16390 copyNames((UA_Node*)hascause,
"HasCause");
16391 hascause->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"MayBeCausedBy");
16393 hascause->isAbstract =
false;
16394 hascause->symmetric =
false;
16395 addNodeInternal(server, (UA_Node*)hascause, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16398 copyNames((UA_Node*)haseffect,
"HasEffect");
16399 haseffect->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"MayBeEffectedBy");
16401 haseffect->isAbstract =
false;
16402 haseffect->symmetric =
false;
16403 addNodeInternal(server, (UA_Node*)haseffect, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16406 copyNames((UA_Node*)hashistoricalconfiguration,
"HasHistoricalConfiguration");
16407 hashistoricalconfiguration->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"HistoricalConfigurationOf");
16409 hashistoricalconfiguration->isAbstract =
false;
16410 hashistoricalconfiguration->symmetric =
false;
16411 addNodeInternal(server, (UA_Node*)hashistoricalconfiguration, UA_NODEID_NUMERIC(0,
UA_NS0ID_AGGREGATES), nodeIdHasSubType);
16418 copyNames((UA_Node*)basedatatype,
"BaseDataType");
16420 basedatatype->isAbstract =
true;
16463 basevartype->valueRank = -2;
16471 basedatavartype->valueRank = -2;
16473 addNodeInternalWithType(server, (UA_Node*)basedatavartype,
16479 propertytype->valueRank = -2;
16481 addNodeInternalWithType(server, (UA_Node*)propertytype,
16487 buildinfotype->valueRank = -1;
16489 addNodeInternalWithType(server, (UA_Node*)buildinfotype,
16495 serverstatustype->valueRank = -1;
16497 addNodeInternalWithType(server, (UA_Node*)serverstatustype,
16506 copyNames((UA_Node*)baseobjtype,
"BaseObjectType");
16527 static const UA_NodeId nodeIdFolderType = {
16530 static const UA_NodeId nodeIdHasTypeDefinition = {
16535 copyNames((UA_Node*)root,
"Root");
16544 copyNames((UA_Node*)objects,
"Objects");
16546 addNodeInternalWithType(server, (UA_Node*)objects, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16547 nodeIdOrganizes, nodeIdFolderType);
16550 copyNames((UA_Node*)types,
"Types");
16552 addNodeInternalWithType(server, (UA_Node*)types, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16553 nodeIdOrganizes, nodeIdFolderType);
16556 copyNames((UA_Node*)referencetypes,
"ReferenceTypes");
16558 addNodeInternalWithType(server, (UA_Node*)referencetypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16559 nodeIdOrganizes, nodeIdFolderType);
16564 copyNames((UA_Node*)datatypes,
"DataTypes");
16566 addNodeInternalWithType(server, (UA_Node*)datatypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16567 nodeIdOrganizes, nodeIdFolderType);
16572 copyNames((UA_Node*)variabletypes,
"VariableTypes");
16574 addNodeInternalWithType(server, (UA_Node*)variabletypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16575 nodeIdOrganizes, nodeIdFolderType);
16580 copyNames((UA_Node*)objecttypes,
"ObjectTypes");
16582 addNodeInternalWithType(server, (UA_Node*)objecttypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16583 nodeIdOrganizes, nodeIdFolderType);
16588 copyNames((UA_Node*)eventtypes,
"EventTypes");
16590 addNodeInternalWithType(server, (UA_Node*)eventtypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16591 nodeIdOrganizes, nodeIdFolderType);
16594 copyNames((UA_Node*)views,
"Views");
16596 addNodeInternalWithType(server, (UA_Node*)views, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16597 nodeIdOrganizes, nodeIdFolderType);
16604 copyNames((UA_Node*)mandatory,
"Mandatory");
16606 addNodeInternalWithType(server, (UA_Node*)mandatory, UA_NODEID_NULL,
16610 copyNames((UA_Node*)optional,
"Optional");
16612 addNodeInternalWithType(server, (UA_Node*)optional, UA_NODEID_NULL,
16617 ua_namespaceinit_generated(server);
16626 copyNames((UA_Node*)servernode,
"Server");
16635 deleteInstanceChildren(server, &serverNodeId);
16638 copyNames((UA_Node*)namespaceArray,
"NamespaceArray");
16641 namespaceArray->value.dataSource = (UA_DataSource) {.handle = server, .read = readNamespaces,
16642 .write = writeNamespaces};
16644 namespaceArray->valueRank = 1;
16645 namespaceArray->minimumSamplingInterval = 1.0;
16646 addNodeInternalWithType(server, (UA_Node*)namespaceArray, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16650 copyNames((UA_Node*)serverArray,
"ServerArray");
16653 &server->config.applicationDescription.applicationUri, 1,
16654 &UA_TYPES[UA_TYPES_STRING]);
16655 serverArray->value.data.value.hasValue =
true;
16656 serverArray->valueRank = 1;
16657 serverArray->minimumSamplingInterval = 1.0;
16658 addNodeInternalWithType(server, (UA_Node*)serverArray, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16662 copyNames((UA_Node*)servercapablities,
"ServerCapabilities");
16664 addNodeInternalWithType(server, (UA_Node*)servercapablities, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16665 nodeIdHasComponent,
16668 deleteInstanceChildren(server, &ServerCapabilitiesNodeId);
16671 copyNames((UA_Node*)localeIdArray,
"LocaleIdArray");
16675 &enLocale, 1, &UA_TYPES[UA_TYPES_STRING]);
16676 localeIdArray->value.data.value.hasValue =
true;
16677 localeIdArray->valueRank = 1;
16678 localeIdArray->minimumSamplingInterval = 1.0;
16679 addNodeInternalWithType(server, (UA_Node*)localeIdArray,
16683 UA_VariableNode *maxBrowseContinuationPoints = UA_NodeStore_newVariableNode();
16684 copyNames((UA_Node*)maxBrowseContinuationPoints,
"MaxBrowseContinuationPoints");
16685 maxBrowseContinuationPoints->nodeId.identifier.numeric =
16689 maxBrowseContinuationPoints->value.data.value.hasValue =
true;
16690 addNodeInternalWithType(server, (UA_Node*)maxBrowseContinuationPoints,
16695 #define MAX_PROFILEARRAY 16 //a *magic* limit to the number of supported profiles 16696 #define ADDPROFILEARRAY(x) profileArray[profileArraySize++] = UA_STRING_ALLOC(x) 16699 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/NanoEmbeddedDevice");
16701 #ifdef UA_ENABLE_SERVICESET_NODEMANAGEMENT 16702 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/NodeManagement");
16704 #ifdef UA_ENABLE_SERVICESET_METHOD 16705 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/Methods");
16707 #ifdef UA_ENABLE_SUBSCRIPTIONS 16708 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/EmbeddedDataChangeSubscription");
16711 UA_VariableNode *serverProfileArray = UA_NodeStore_newVariableNode();
16712 copyNames((UA_Node*)serverProfileArray,
"ServerProfileArray");
16715 UA_Array_new(profileArraySize, &UA_TYPES[UA_TYPES_STRING]),
16716 profileArraySize, &UA_TYPES[UA_TYPES_STRING]);
16717 for(
UA_UInt16 i=0;i<profileArraySize;++i)
16718 ((
UA_String *)serverProfileArray->value.data.value.value.data)[i] = profileArray[i];
16719 serverProfileArray->value.data.value.hasValue =
true;
16720 serverProfileArray->valueRank = 1;
16721 serverProfileArray->minimumSamplingInterval = 1.0;
16722 addNodeInternalWithType(server, (UA_Node*)serverProfileArray,
16726 UA_VariableNode *softwareCertificates = UA_NodeStore_newVariableNode();
16727 copyNames((UA_Node*)softwareCertificates,
"SoftwareCertificates");
16730 addNodeInternalWithType(server, (UA_Node*)softwareCertificates,
16734 UA_VariableNode *maxQueryContinuationPoints = UA_NodeStore_newVariableNode();
16735 copyNames((UA_Node*)maxQueryContinuationPoints,
"MaxQueryContinuationPoints");
16738 UA_UInt16_new(), &UA_TYPES[UA_TYPES_UINT16]);
16739 maxQueryContinuationPoints->value.data.value.hasValue =
true;
16740 addNodeInternalWithType(server, (UA_Node*)maxQueryContinuationPoints,
16744 UA_VariableNode *maxHistoryContinuationPoints = UA_NodeStore_newVariableNode();
16745 copyNames((UA_Node*)maxHistoryContinuationPoints,
"MaxHistoryContinuationPoints");
16748 UA_UInt16_new(), &UA_TYPES[UA_TYPES_UINT16]);
16749 maxHistoryContinuationPoints->value.data.value.hasValue =
true;
16750 addNodeInternalWithType(server, (UA_Node*)maxHistoryContinuationPoints,
16754 UA_VariableNode *minSupportedSampleRate = UA_NodeStore_newVariableNode();
16755 copyNames((UA_Node*)minSupportedSampleRate,
"MinSupportedSampleRate");
16759 minSupportedSampleRate->value.data.value.hasValue =
true;
16760 addNodeInternalWithType(server, (UA_Node*)minSupportedSampleRate,
16765 copyNames((UA_Node*)modellingRules,
"ModellingRules");
16767 addNodeInternalWithType(server, (UA_Node*)modellingRules,
16772 copyNames((UA_Node*)aggregateFunctions,
"AggregateFunctions");
16774 addNodeInternalWithType(server, (UA_Node*)aggregateFunctions,
16779 copyNames((UA_Node*)serverdiagnostics,
"ServerDiagnostics");
16781 addNodeInternalWithType(server, (UA_Node*)serverdiagnostics,
16785 deleteInstanceChildren(server, &ServerDiagnosticsNodeId);
16788 copyNames((UA_Node*)enabledFlag,
"EnabledFlag");
16792 enabledFlag->value.data.value.hasValue =
true;
16793 enabledFlag->valueRank = 1;
16794 enabledFlag->minimumSamplingInterval = 1.0;
16795 addNodeInternalWithType(server, (UA_Node*)enabledFlag,
16800 copyNames((UA_Node*)serverstatus,
"ServerStatus");
16803 serverstatus->value.dataSource = (UA_DataSource) {.handle = server, .read = readStatus,
16805 addNodeInternalWithType(server, (UA_Node*)serverstatus, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16809 copyNames((UA_Node*)starttime,
"StartTime");
16813 starttime->value.data.value.hasValue =
true;
16814 addNodeInternalWithType(server, (UA_Node*)starttime,
16819 copyNames((UA_Node*)currenttime,
"CurrentTime");
16822 currenttime->value.dataSource = (UA_DataSource) {.handle =
NULL, .read = readCurrentTime,
16824 addNodeInternalWithType(server, (UA_Node*)currenttime,
16829 copyNames((UA_Node*)state,
"State");
16833 state->value.data.value.hasValue =
true;
16834 state->minimumSamplingInterval = 500.0f;
16839 copyNames((UA_Node*)buildinfo,
"BuildInfo");
16843 buildinfo->value.data.value.hasValue =
true;
16844 addNodeInternalWithType(server, (UA_Node*)buildinfo,
16849 copyNames((UA_Node*)producturi,
"ProductUri");
16852 &UA_TYPES[UA_TYPES_STRING]);
16853 producturi->value.data.value.hasValue =
true;
16854 addNodeInternalWithType(server, (UA_Node*)producturi,
16859 copyNames((UA_Node*)manufacturername,
"ManufacturerName");
16862 &server->config.buildInfo.manufacturerName,
16863 &UA_TYPES[UA_TYPES_STRING]);
16864 manufacturername->value.data.value.hasValue =
true;
16865 addNodeInternalWithType(server, (UA_Node*)manufacturername,
16870 copyNames((UA_Node*)productname,
"ProductName");
16873 &UA_TYPES[UA_TYPES_STRING]);
16874 productname->value.data.value.hasValue =
true;
16875 addNodeInternalWithType(server, (UA_Node*)productname,
16880 copyNames((UA_Node*)softwareversion,
"SoftwareVersion");
16883 &server->config.buildInfo.softwareVersion, &UA_TYPES[UA_TYPES_STRING]);
16884 softwareversion->value.data.value.hasValue =
true;
16885 addNodeInternalWithType(server, (UA_Node*)softwareversion,
16890 copyNames((UA_Node*)buildnumber,
"BuildNumber");
16893 &UA_TYPES[UA_TYPES_STRING]);
16894 buildnumber->value.data.value.hasValue =
true;
16895 addNodeInternalWithType(server, (UA_Node*)buildnumber,
16900 copyNames((UA_Node*)builddate,
"BuildDate");
16903 &UA_TYPES[UA_TYPES_DATETIME]);
16904 builddate->value.data.value.hasValue =
true;
16905 addNodeInternalWithType(server, (UA_Node*)builddate,
16909 UA_VariableNode *secondstillshutdown = UA_NodeStore_newVariableNode();
16910 copyNames((UA_Node*)secondstillshutdown,
"SecondsTillShutdown");
16914 secondstillshutdown->value.data.value.hasValue =
true;
16915 addNodeInternalWithType(server, (UA_Node*)secondstillshutdown,
16920 copyNames((UA_Node*)shutdownreason,
"ShutdownReason");
16924 shutdownreason->value.data.value.hasValue =
true;
16925 addNodeInternalWithType(server, (UA_Node*)shutdownreason,
16930 copyNames((UA_Node*)servicelevel,
"ServiceLevel");
16933 servicelevel->value.dataSource = (UA_DataSource) {.handle = server, .read = readServiceLevel,
16935 addNodeInternalWithType(server, (UA_Node*)servicelevel,
16940 copyNames((UA_Node*)auditing,
"Auditing");
16943 auditing->value.dataSource = (UA_DataSource) {.handle = server, .read = readAuditing, .write =
NULL};
16944 addNodeInternalWithType(server, (UA_Node*)auditing,
16949 copyNames((UA_Node*)vendorServerInfo,
"VendorServerInfo");
16951 addNodeInternalWithType(server, (UA_Node*)vendorServerInfo,
16961 copyNames((UA_Node*)serverRedundancy,
"ServerRedundancy");
16963 addNodeInternalWithType(server, (UA_Node*)serverRedundancy,
16972 copyNames((UA_Node*)redundancySupport,
"RedundancySupport");
16974 redundancySupport->valueRank = -1;
16979 redundancySupport->value.data.value.hasValue =
true;
16980 addNodeInternalWithType(server, (UA_Node*)redundancySupport,
16984 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 16986 UA_Argument_init(&inputArguments);
16988 inputArguments.
name = UA_STRING(
"SubscriptionId");
16992 UA_Argument_init(&outputArguments[0]);
16994 outputArguments[0].
name = UA_STRING(
"ServerHandles");
16997 UA_Argument_init(&outputArguments[1]);
16999 outputArguments[1].
name = UA_STRING(
"ClientHandles");
17003 UA_MethodAttributes_init(&addmethodattributes);
17004 addmethodattributes.
displayName = UA_LOCALIZEDTEXT(
"",
"GetMonitoredItems");
17011 UA_QUALIFIEDNAME(0,
"GetMonitoredItems"), addmethodattributes,
17014 1, &inputArguments, 2, outputArguments,
NULL);
17036 UA_StatusCode retval = UA_RequestHeader_decodeBinary(msg, &offset, &requestHeader);
17040 UA_init(response, responseType);
17046 UA_RequestHeader_deleteMembers(&requestHeader);
17047 UA_ResponseHeader_deleteMembers(responseHeader);
17054 switch(requestTypeId) {
17059 *requiresSession =
false;
17065 *requiresSession =
false;
17071 *requiresSession =
false;
17119 #ifdef UA_ENABLE_SUBSCRIPTIONS 17171 #ifdef UA_ENABLE_METHODCALLS 17179 #ifdef UA_ENABLE_NODEMANAGEMENT 17214 if(UA_TcpHelloMessage_decodeBinary(msg, offset, &helloMessage) !=
UA_STATUSCODE_GOOD) {
17215 connection->
close(connection);
17230 UA_TcpHelloMessage_deleteMembers(&helloMessage);
17246 UA_ByteString_init(&ack_msg);
17254 UA_TcpMessageHeader_encodeBinary(&ackHeader, &ack_msg, &tmpPos);
17255 UA_TcpAcknowledgeMessage_encodeBinary(&ackMessage, &ack_msg, &tmpPos);
17257 connection->
send(connection, &ack_msg);
17269 if(!connection->
channel && channelId != 0)
17281 retval |= UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(msg, &offset, &asymHeader);
17282 retval |= UA_SequenceHeader_decodeBinary(msg, &offset, &seqHeader);
17283 retval |= UA_NodeId_decodeBinary(msg, &offset, &requestType);
17284 retval |= UA_OpenSecureChannelRequest_decodeBinary(msg, &offset, &r);
17288 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17289 UA_NodeId_deleteMembers(&requestType);
17290 UA_OpenSecureChannelRequest_deleteMembers(&r);
17291 connection->
close(connection);
17297 UA_OpenSecureChannelResponse_init(&p);
17299 UA_OpenSecureChannelRequest_deleteMembers(&r);
17304 UA_OpenSecureChannelResponse_deleteMembers(&p);
17305 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17306 connection->
close(connection);
17315 UA_ByteString_init(&resp_msg);
17318 UA_OpenSecureChannelResponse_deleteMembers(&p);
17319 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17320 connection->
close(connection);
17325 size_t tmpPos = 12;
17327 retval |= UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(&asymHeader, &resp_msg, &tmpPos);
17328 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &resp_msg, &tmpPos);
17330 retval |= UA_NodeId_encodeBinary(&responseType, &resp_msg, &tmpPos);
17331 retval |= UA_OpenSecureChannelResponse_encodeBinary(&p, &resp_msg, &tmpPos);
17335 UA_OpenSecureChannelResponse_deleteMembers(&p);
17336 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17337 connection->
close(connection);
17347 UA_SecureConversationMessageHeader_encodeBinary(&respHeader, &resp_msg, &tmpPos);
17349 connection->
send(connection, &resp_msg);
17352 UA_OpenSecureChannelResponse_deleteMembers(&p);
17353 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17361 size_t *offset = &ppos;
17365 UA_StatusCode retval = UA_NodeId_decodeBinary(msg, offset, &requestTypeId);
17369 UA_NodeId_deleteMembers(&requestTypeId);
17372 size_t requestPos = *offset;
17380 &responseType, &service, &sessionRequired);
17384 "Client requested a subscription, " \
17385 "but those are not enabled in the build");
17388 "Unknown request with type identifier %i",
17397 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 17399 sessionRequired =
false;
17408 "Could not decode the request");
17409 sendError(channel, msg, requestPos, responseType, requestId, retval);
17415 UA_init(response, responseType);
17416 UA_Session *session =
NULL;
17421 goto send_response;
17433 "Trying to activate a session that is " \
17434 "not known in the server");
17435 sendError(channel, msg, requestPos, responseType,
17441 goto send_response;
17445 UA_Session anonymousSession;
17447 if(sessionRequired) {
17449 "Service request %i without a valid session",
17451 sendError(channel, msg, requestPos, responseType,
17457 anonymousSession.
sessionId = UA_NODEID_GUID(0, UA_GUID_NULL);
17458 anonymousSession.
channel = channel;
17459 session = &anonymousSession;
17463 if(sessionRequired && !session->
activated) {
17465 "Calling service %i on a non-activated session",
17467 sendError(channel, msg, requestPos, responseType,
17476 if(session->
channel != channel) {
17478 "Client tries to use an obsolete securechannel");
17479 sendError(channel, msg, requestPos, responseType,
17488 #ifdef UA_ENABLE_SUBSCRIPTIONS 17499 service(server, session, request, response);
17509 "Could not send the message over the SecureChannel " 17510 "with StatusCode %s", UA_StatusCode_name(retval));
17520 if (UA_TcpErrorMessage_decodeBinary(msg, offset, &errorMessage) !=
UA_STATUSCODE_GOOD) {
17521 connection->
close(connection);
17526 "Client replied with an error message: %s %.*s",
17534 UA_Server_processSecureChannelMessage(UA_Server *server,
UA_SecureChannel *channel,
17539 switch(messagetype) {
17543 "Client replied with an error message: %s %.*s",
17549 "Cannot process a HEL on an open channel");
17553 "Process an OPN on an open channel");
17559 processMSG(server, channel, requestId, message);
17568 "Unknown message type");
17584 "resulted in error code %s", UA_StatusCode_name(retval));
17589 UA_StatusCode retval = UA_TcpMessageHeader_decodeBinary(message, &offset, &tcpMessageHeader);
17591 connection->
close(connection);
17599 "Connection %i | Process ERR message", connection->
sockfd);
17600 processERR(server, connection, message, &offset);
17604 "Connection %i | Process HEL message", connection->
sockfd);
17605 processHEL(connection, message, &offset);
17609 "Connection %i | Process OPN message", connection->
sockfd);
17611 retval = UA_UInt32_decodeBinary(message, &offset, &channelId);
17613 connection->
close(connection);
17616 processOPN(server, connection, channelId, &offsetMessage);
17620 "Connection %i | Processing a MSG message not possible " 17621 "without a SecureChannel", connection->
sockfd);
17622 connection->
close(connection);
17626 "Connection %i | Processing a CLO message not possible " 17627 "without a SecureChannel", connection->
sockfd);
17628 connection->
close(connection);
17632 "Connection %i | Unknown message type", connection->
sockfd);
17633 connection->
close(connection);
17654 if(buflen <= progress + 1 || buf[progress] !=
':') {
17660 size_t progress2 =
UA_readNumber(&buf[progress], buflen - progress, &dim->
max);
17665 if(dim->
min >= dim->
max)
17668 return progress + progress2;
17674 size_t dimensionsMax = 0;
17680 if(idx >= dimensionsMax) {
17688 dimensions = newds;
17689 dimensionsMax = dimensionsMax + 2;
17693 size_t progress = readDimension(&str->
data[offset], str->
length - offset,
17695 if(progress == 0) {
17699 offset += progress;
17703 if(offset >= str->
length)
17706 if(str->
data[offset] !=
',') {
17728 UA_NodeId **typeHierarchy,
size_t *typeHierarchySize) {
17729 size_t results_size = 20;
17734 UA_StatusCode retval = UA_NodeId_copy(&rootRef->nodeId, &results[0]);
17740 const UA_Node *node = rootRef;
17745 for(
size_t i = 0; i < node->referencesSize; ++i) {
17747 if(node->references[i].isInverse != inverse ||
17748 !
UA_NodeId_equal(&hasSubtypeNodeId, &node->references[i].referenceTypeId))
17753 for(
size_t j = 0; j <= last; ++j) {
17754 if(
UA_NodeId_equal(&node->references[i].targetId.nodeId, &results[j])) {
17763 if(last + 1 >= results_size) {
17770 results = new_results;
17775 retval = UA_NodeId_copy(&node->references[i].targetId.nodeId, &results[++last]);
17786 if(!node || node->nodeClass != rootRef->nodeClass)
17795 *typeHierarchy = results;
17796 *typeHierarchySize = last + 1;
17802 const UA_NodeId *referenceTypeIds,
size_t referenceTypeIdsSize) {
17811 for(
size_t i = 0; i < node->referencesSize; ++i) {
17812 if(!node->references[i].isInverse)
17816 for(
size_t j = 0; j < referenceTypeIdsSize; ++j) {
17817 if(
UA_NodeId_equal(&node->references[i].referenceTypeId, &referenceTypeIds[j]) &&
17818 isNodeInTree(ns, &node->references[i].targetId.nodeId, nodeToFind,
17819 referenceTypeIds, referenceTypeIdsSize))
17847 for(
size_t i = 0; i < node->referencesSize; ++i) {
17848 if(node->references[i].isInverse == inverse &&
17850 parentId = &node->references[i].targetId.nodeId;
17862 const UA_Node *type =
getNodeType(server, (
const UA_Node*)node);
17870 const UA_Node *type =
getNodeType(server, (
const UA_Node*)node);
17880 for(
size_t i = 0; i < node->referencesSize; ++i) {
17881 if(node->references[i].isInverse ==
false &&
17884 if(node->references[i].isInverse ==
true &&
17885 UA_NodeId_equal(&node->references[i].referenceTypeId, &hasTypeDefinition))
17896 const void *data) {
17897 #ifndef UA_ENABLE_MULTITHREADING 17901 UA_Node *editNode = (UA_Node*)(uintptr_t)node;
17902 return callback(server, session, editNode, data);
17909 retval = callback(server, session, copy, data);
17962 #define MAXTIMEOUT 50 // max timeout in millisec until the next main loop iteration 17965 processJob(UA_Server *server,
UA_Job *job) {
17968 switch(job->
type) {
17969 case UA_JOBTYPE_NOTHING:
17971 case UA_JOBTYPE_DETACHCONNECTION:
17974 case UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER:
17980 case UA_JOBTYPE_BINARYMESSAGE_ALLOCATED:
17985 case UA_JOBTYPE_METHODCALL:
17986 case UA_JOBTYPE_METHODCALL_DELAYED:
17991 "Trying to execute a job of unknown type");
18001 #ifdef UA_ENABLE_MULTITHREADING 18003 struct MainLoopJob {
18004 struct cds_lfs_node node;
18008 struct DispatchJob {
18009 struct cds_wfcq_node node;
18014 workerLoop(UA_Worker *worker) {
18015 UA_Server *server = worker->server;
18017 volatile UA_Boolean *running = &worker->running;
18021 rcu_register_thread();
18024 struct DispatchJob *dj = (
struct DispatchJob*)
18025 cds_wfcq_dequeue_blocking(&server->dispatchQueue_head, &server->dispatchQueue_tail);
18027 processJob(server, &dj->job);
18031 pthread_mutex_lock(&server->dispatchQueue_mutex);
18032 pthread_cond_wait(&server->dispatchQueue_condition, &server->dispatchQueue_mutex);
18033 pthread_mutex_unlock(&server->dispatchQueue_mutex);
18035 UA_atomic_add(counter, 1);
18040 rcu_unregister_thread();
18046 dispatchJob(UA_Server *server,
const UA_Job *job) {
18047 struct DispatchJob *dj =
UA_malloc(
sizeof(
struct DispatchJob));
18049 cds_wfcq_node_init(&dj->node);
18050 cds_wfcq_enqueue(&server->dispatchQueue_head, &server->dispatchQueue_tail, &dj->node);
18054 emptyDispatchQueue(UA_Server *server) {
18055 while(!cds_wfcq_empty(&server->dispatchQueue_head, &server->dispatchQueue_tail)) {
18056 struct DispatchJob *dj = (
struct DispatchJob*)
18057 cds_wfcq_dequeue_blocking(&server->dispatchQueue_head, &server->dispatchQueue_tail);
18058 processJob(server, &dj->job);
18093 if(tmpRj->nextTime >= nextTime_max)
18095 if(tmpRj->interval == rj->interval &&
18097 nextTime_max = tmpRj->nextTime;
18102 rj->nextTime = nextTime_max;
18124 rj->interval = interval_dt;
18128 #ifdef UA_ENABLE_MULTITHREADING 18130 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18136 .type = UA_JOBTYPE_METHODCALL,
18137 .job.methodCall = {.data = rj, .method = (void (*)(UA_Server*,
void*))addRepeatedJob}};
18138 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18141 addRepeatedJob(server, rj);
18156 tmp_last.nextTime = current-1;
18162 if(rj->nextTime > current)
18166 #ifdef UA_ENABLE_MULTITHREADING 18167 dispatchJob(server, &rj->job);
18168 *dispatched =
true;
18170 struct RepeatedJob **previousNext = rj->next.le_prev;
18171 processJob(server, &rj->job);
18175 if((
void*)*previousNext != (
void*)rj) {
18177 "The current repeated job removed itself");
18188 rj->nextTime += (
UA_Int64)rj->interval;
18192 if(rj->nextTime < current)
18193 rj->nextTime = current + 1;
18197 if(last_dispatched->nextTime == rj->nextTime) {
18200 UA_assert(last_dispatched != &tmp_last);
18201 prev_rj = last_dispatched;
18204 prev_rj =
LIST_FIRST(&server->repeatedJobs);
18207 if(!n || n->nextTime >= rj->nextTime)
18214 if(prev_rj != rj) {
18220 last_dispatched = rj;
18226 if(first && first->nextTime < next)
18227 next = first->nextTime;
18233 removeRepeatedJob(UA_Server *server,
UA_Guid *jobId) {
18242 #ifdef UA_ENABLE_MULTITHREADING 18248 #ifdef UA_ENABLE_MULTITHREADING 18254 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18256 .type = UA_JOBTYPE_METHODCALL,
18257 .job.methodCall = {.data = idptr, .method = (void (*)(UA_Server*,
void*))removeRepeatedJob}};
18258 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18260 removeRepeatedJob(server, &jobId);
18278 delayed_free(UA_Server *server,
void *data) {
18286 #ifndef UA_ENABLE_MULTITHREADING 18298 dj->job.type = UA_JOBTYPE_METHODCALL;
18299 dj->job.job.methodCall.data = data;
18300 dj->job.job.methodCall.method = callback;
18306 processDelayedCallbacks(UA_Server *server) {
18310 processJob(server, &dj->job);
18317 #define DELAYEDJOBSSIZE 100 // Collect delayed jobs until we have DELAYEDWORKSIZE items 18319 struct DelayedJobs {
18320 struct DelayedJobs *next;
18323 UA_Job jobs[DELAYEDJOBSSIZE];
18327 static void getCounters(UA_Server *server,
struct DelayedJobs *delayed) {
18329 for(
UA_UInt16 i = 0; i < server->config.nThreads; ++i)
18330 counters[i] = server->workers[i].counter;
18331 delayed->workerCounters = counters;
18338 addDelayedJob(UA_Server *server,
UA_Job *job) {
18339 struct DelayedJobs *dj = server->delayedJobs;
18340 if(!dj || dj->jobsCount >= DELAYEDJOBSSIZE) {
18342 dj =
UA_malloc(
sizeof(
struct DelayedJobs));
18345 "Not enough memory to add a delayed job");
18349 dj->workerCounters =
NULL;
18350 dj->next = server->delayedJobs;
18351 server->delayedJobs = dj;
18357 {.method = (void (*)(UA_Server*,
void*))getCounters, .data = dj->next}};
18358 dispatchJob(server, &setCounter);
18361 dj->jobs[dj->jobsCount] = *job;
18366 addDelayedJobAsync(UA_Server *server,
UA_Job *job) {
18367 addDelayedJob(server, job);
18376 j->
type = UA_JOBTYPE_METHODCALL;
18379 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18380 mlw->job = (
UA_Job) {.type = UA_JOBTYPE_METHODCALL, .job.methodCall =
18382 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18388 dispatchDelayedJobs(UA_Server *server,
void *_) {
18390 struct DelayedJobs *dw = server->delayedJobs, *beforedw = dw;
18396 if(!dw->workerCounters) {
18402 for(
size_t i = 0; i < server->config.nThreads; ++i) {
18403 if(dw->workerCounters[i] == server->workers[i].counter) {
18416 for(
size_t i = 0; i < dw->jobsCount; ++i)
18417 processJob(server, &dw->jobs[i]);
18418 struct DelayedJobs *next = UA_atomic_xchg((
void**)&beforedw->next,
NULL);
18431 #ifdef UA_ENABLE_MULTITHREADING 18432 static void processMainLoopJobs(UA_Server *server) {
18434 struct cds_lfs_head *head = __cds_lfs_pop_all(&server->mainLoopJobs);
18437 struct MainLoopJob *mlw = (
struct MainLoopJob*)&head->node;
18438 struct MainLoopJob *next;
18440 processJob(server, &mlw->job);
18441 next = (
struct MainLoopJob*)mlw->node.next;
18444 }
while((mlw = next));
18449 #ifdef UA_ENABLE_MULTITHREADING 18452 "Spinning up %u worker thread(s)", server->config.nThreads);
18453 pthread_cond_init(&server->dispatchQueue_condition, 0);
18454 pthread_mutex_init(&server->dispatchQueue_mutex, 0);
18455 server->workers =
UA_malloc(server->config.nThreads *
sizeof(UA_Worker));
18456 if(!server->workers)
18458 for(
size_t i = 0; i < server->config.nThreads; ++i) {
18459 UA_Worker *worker = &server->workers[i];
18460 worker->server = server;
18461 worker->counter = 0;
18462 worker->running =
true;
18463 pthread_create(&worker->thr,
NULL, (
void* (*)(
void*))workerLoop, worker);
18467 UA_Job processDelayed = {.
type = UA_JOBTYPE_METHODCALL,
18474 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18476 result |= nl->
start(nl, server->config.logger);
18485 completeMessages(UA_Server *server,
UA_Job *job) {
18492 "Lost message(s) from Connection %i as memory could not be allocated",
18496 "Could not merge half-received messages on Connection %i with error 0x%08x",
18498 job->
type = UA_JOBTYPE_NOTHING;
18502 job->
type = UA_JOBTYPE_BINARYMESSAGE_ALLOCATED;
18506 job->
type = UA_JOBTYPE_NOTHING;
18510 #ifdef UA_ENABLE_MULTITHREADING 18512 processMainLoopJobs(server);
18517 UA_DateTime nextRepeated = processRepeatedJobs(server, now, &dispatched);
18524 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18529 if(i == server->config.networkLayersSize-1)
18530 jobsSize = nl->
getJobs(nl, &jobs, timeout);
18532 jobsSize = nl->
getJobs(nl, &jobs, 0);
18534 for(
size_t k = 0; k < jobsSize; ++k) {
18535 #ifdef UA_ENABLE_MULTITHREADING 18537 if(jobs[k].type == UA_JOBTYPE_METHODCALL_DELAYED) {
18538 addDelayedJob(server, &jobs[k]);
18539 jobs[k].
type = UA_JOBTYPE_NOTHING;
18544 if(jobs[k].type == UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER)
18545 completeMessages(server, &jobs[k]);
18549 for(
size_t j = 0; j < jobsSize; ++j) {
18550 #ifdef UA_ENABLE_MULTITHREADING 18551 dispatchJob(server, &jobs[j]);
18554 processJob(server, &jobs[j]);
18563 #ifdef UA_ENABLE_MULTITHREADING 18566 pthread_cond_broadcast(&server->dispatchQueue_condition);
18568 processDelayedCallbacks(server);
18573 if(nextRepeated > now)
18579 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18582 size_t stopJobsSize = nl->
stop(nl, &stopJobs);
18583 for(
size_t j = 0; j < stopJobsSize; ++j)
18584 processJob(server, &stopJobs[j]);
18588 #ifdef UA_ENABLE_MULTITHREADING 18590 if(server->workers) {
18592 "Shutting down %u worker thread(s)", server->config.nThreads);
18594 for(
size_t i = 0; i < server->config.nThreads; ++i)
18595 server->workers[i].running =
false;
18596 pthread_cond_broadcast(&server->dispatchQueue_condition);
18597 for(
size_t i = 0; i < server->config.nThreads; ++i)
18598 pthread_join(server->workers[i].thr,
NULL);
18601 server->workers =
NULL;
18605 emptyDispatchQueue(server);
18609 processDelayedCallbacks(server);
18630 #define STARTCHANNELID 1 18631 #define STARTTOKENID 1 18638 cm->currentChannelCount = 0;
18639 cm->server = server;
18653 removeSecureChannelCallback(UA_Server *server,
void *entry) {
18666 "Could not remove the secure channel with error code %s",
18667 UA_StatusCode_name(retval));
18673 UA_atomic_add(&cm->currentChannelCount, (
UA_UInt32)-1);
18684 if(timeout < nowMonotonic || !entry->channel.
connection) {
18686 "SecureChannel has timed out");
18687 removeSecureChannel(cm, entry);
18700 "Channel was purged since maxSecureChannels was " 18701 "reached and channel had no session attached");
18702 removeSecureChannel(cm, entry);
18719 if(cm->currentChannelCount >= cm->server->config.maxSecureChannels && !purgeFirstChannelWithoutSession(cm)){
18752 UA_atomic_add(&cm->currentChannelCount, 1);
18778 UA_ByteString_deleteMembers(&channel->
clientNonce);
18810 return removeSecureChannel(cm, entry);
18823 sm->currentSessionCount = 0;
18824 sm->server = server;
18839 removeSessionCallback(UA_Server *server,
void *entry) {
18848 sentry->session.activated =
false;
18855 "Could not remove session with error code %s",
18856 UA_StatusCode_name(retval));
18862 UA_atomic_add(&sm->currentSessionCount, (
UA_UInt32)-1);
18872 if(sentry->session.validTill >= nowMonotonic)
18875 "Session has timed out");
18876 removeSession(sm, sentry);
18891 "Client tries to use a session that has timed out");
18896 return ¤t->session;
18910 if(sm->currentSessionCount >= sm->server->config.maxSessions)
18917 UA_atomic_add(&sm->currentSessionCount, 1);
18919 newentry->session.sessionId = UA_NODEID_GUID(1,
UA_Guid_random());
18920 newentry->session.authenticationToken = UA_NODEID_GUID(1,
UA_Guid_random());
18926 newentry->session.timeout = sm->server->config.maxSessionTimeout;
18930 *session = &newentry->session;
18943 return removeSession(sm, current);
18955 UA_NodeId_deleteMembers(&node->nodeId);
18956 UA_QualifiedName_deleteMembers(&node->browseName);
18957 UA_LocalizedText_deleteMembers(&node->displayName);
18958 UA_LocalizedText_deleteMembers(&node->description);
18961 node->references =
NULL;
18962 node->referencesSize = 0;
18965 switch(node->nodeClass) {
18975 UA_NodeId_deleteMembers(&p->dataType);
18978 p->arrayDimensions =
NULL;
18979 p->arrayDimensionsSize = 0;
18981 UA_DataValue_deleteMembers(&p->value.data.value);
19008 src->arrayDimensionsSize,
19009 (
void**)&dst->arrayDimensions,
19013 dst->arrayDimensionsSize = src->arrayDimensionsSize;
19014 retval = UA_NodeId_copy(&src->dataType, &dst->dataType);
19015 dst->valueRank = src->valueRank;
19016 dst->valueSource = src->valueSource;
19018 retval |= UA_DataValue_copy(&src->value.data.value,
19019 &dst->value.data.value);
19020 dst->value.data.callback = src->value.data.callback;
19022 dst->value.dataSource = src->value.dataSource;
19028 UA_StatusCode retval = UA_CommonVariableNode_copy(src, dst);
19041 dst->isAbstract = src->isAbstract;
19085 if(src->nodeClass != dst->nodeClass)
19089 UA_StatusCode retval = UA_NodeId_copy(&src->nodeId, &dst->nodeId);
19090 dst->nodeClass = src->nodeClass;
19091 retval |= UA_QualifiedName_copy(&src->browseName, &dst->browseName);
19092 retval |= UA_LocalizedText_copy(&src->displayName, &dst->displayName);
19093 retval |= UA_LocalizedText_copy(&src->description, &dst->description);
19094 dst->writeMask = src->writeMask;
19095 dst->userWriteMask = src->userWriteMask;
19100 retval |=
UA_Array_copy(src->references, src->referencesSize,
19101 (
void**)&dst->references,
19107 dst->referencesSize = src->referencesSize;
19110 switch(src->nodeClass) {
19159 #ifndef UA_ENABLE_MULTITHREADING 19161 #define UA_NODESTORE_MINSIZE 64 19168 #define UA_NODESTORE_TOMBSTONE ((UA_NodeStoreEntry*)0x01) 19180 7, 13, 31, 61, 127, 251,
19181 509, 1021, 2039, 4093, 8191, 16381,
19182 32749, 65521, 131071, 262139, 524287, 1048573,
19183 2097143, 4194301, 8388593, 16777213, 33554393, 67108859,
19184 134217689, 268435399, 536870909, 1073741789, 2147483647, 4294967291
19194 while(low != high) {
19196 if(n > primes[mid])
19207 switch(nodeClass) {
19238 entry->
node.nodeClass = nodeClass;
19307 UA_UInt32 nindex = higher_prime_index(count * 2);
19318 for(
size_t i = 0, j = 0; i < osize && j < count; ++i) {
19357 deleteEntry(entries[i]);
19368 return &entry->
node;
19375 deleteEntry(entry);
19386 tempNodeid = node->nodeId;
19391 if(node->nodeId.namespaceIndex == 0)
19392 node->nodeId.namespaceIndex = 1;
19395 UA_UInt32 increase = mod2(identifier, size);
19397 node->nodeId.identifier.numeric = identifier;
19398 entry = findSlot(ns, &node->nodeId);
19401 identifier += increase;
19402 if(identifier >= size)
19403 identifier -= size;
19406 entry = findSlot(ns, &node->nodeId);
19425 if(*entry != newEntry->
orig) {
19427 deleteEntry(newEntry);
19430 deleteEntry(*entry);
19440 return (
const UA_Node*)&(*entry)->node;
19465 deleteEntry(*slot);
19491 #ifdef UA_ENABLE_MULTITHREADING 19492 #include <urcu/rculfhash.h> 19495 struct cds_lfht_node htn;
19496 struct rcu_head rcu_head;
19497 struct nodeEntry *orig;
19501 static struct nodeEntry * instantiateEntry(
UA_NodeClass class) {
19502 size_t size =
sizeof(
struct nodeEntry) - sizeof(UA_Node);
19531 struct nodeEntry *entry =
UA_calloc(1, size);
19534 entry->node.nodeClass =
class;
19538 static void deleteEntry(
struct rcu_head *head) {
19539 struct nodeEntry *entry =
container_of(head,
struct nodeEntry, rcu_head);
19545 static int compare(
struct cds_lfht_node *htn,
const void *orig) {
19548 const UA_NodeId *newid = &((
struct nodeEntry *)htn)->node.nodeId;
19554 return (
UA_NodeStore*)cds_lfht_new(64, 64, 0, CDS_LFHT_AUTO_RESIZE,
NULL);
19560 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19561 struct cds_lfht_iter iter;
19562 cds_lfht_first(ht, &iter);
19564 if(!cds_lfht_del(ht, iter.node)) {
19566 struct nodeEntry *entry = (
struct nodeEntry*) iter.
node;
19567 call_rcu(&entry->rcu_head, deleteEntry);
19569 cds_lfht_next(ht, &iter);
19572 cds_lfht_destroy(ht,
NULL);
19577 struct nodeEntry *entry = instantiateEntry(
class);
19580 return (UA_Node*)&entry->node;
19584 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19585 deleteEntry(&entry->rcu_head);
19590 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19591 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19592 cds_lfht_node_init(&entry->htn);
19593 struct cds_lfht_node *result;
19596 tempNodeid = node->nodeId;
19600 result = cds_lfht_add_unique(ht, h, compare, &node->nodeId, &entry->htn);
19602 if(result != &entry->htn) {
19603 deleteEntry(&entry->rcu_head);
19609 if(node->nodeId.namespaceIndex == 0)
19610 node->nodeId.namespaceIndex = 1;
19612 unsigned long identifier;
19613 long before, after;
19614 cds_lfht_count_nodes(ht, &before, &identifier, &after);
19617 node->nodeId.identifier.numeric = (
UA_UInt32)identifier;
19620 result = cds_lfht_add_unique(ht, h, compare, &node->nodeId, &entry->htn);
19621 if(result == &entry->htn)
19623 node->nodeId.identifier.numeric += (
UA_UInt32)(identifier * 2654435761);
19631 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19632 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19636 struct cds_lfht_iter iter;
19637 cds_lfht_lookup(ht, h, compare, &node->nodeId, &iter);
19642 struct nodeEntry *oldEntry = (
struct nodeEntry*)iter.node;
19643 if(oldEntry != entry->orig) {
19644 deleteEntry(&entry->rcu_head);
19648 cds_lfht_node_init(&entry->htn);
19649 if(cds_lfht_replace(ht, &iter, h, compare, &node->nodeId, &entry->htn) != 0) {
19651 deleteEntry(&entry->rcu_head);
19656 call_rcu(&oldEntry->rcu_head, deleteEntry);
19662 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19664 struct cds_lfht_iter iter;
19665 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19666 if(!iter.node || cds_lfht_del(ht, iter.node) != 0)
19668 struct nodeEntry *entry = (
struct nodeEntry*)iter.
node;
19669 call_rcu(&entry->rcu_head, deleteEntry);
19675 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19677 struct cds_lfht_iter iter;
19678 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19679 struct nodeEntry *found_entry = (
struct nodeEntry*)iter.node;
19682 return &found_entry->node;
19687 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19689 struct cds_lfht_iter iter;
19690 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19691 struct nodeEntry *entry = (
struct nodeEntry*)iter.
node;
19694 struct nodeEntry *
new = instantiateEntry(entry->node.nodeClass);
19698 deleteEntry(&new->rcu_head);
19707 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19708 struct cds_lfht_iter iter;
19709 cds_lfht_first(ht, &iter);
19710 while(iter.node !=
NULL) {
19711 struct nodeEntry *found_entry = (
struct nodeEntry*)iter.node;
19712 visitor(&found_entry->node);
19713 cds_lfht_next(ht, &iter);
19736 UA_ApplicationDescription_copy(&server->config.applicationDescription, descr);
19747 UA_ApplicationDescription_delete(descr);
19755 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
19769 if(endpointUrl->
length > 0) {
19770 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing GetEndpointsRequest with endpointUrl " \
19773 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing GetEndpointsRequest with an empty endpointUrl");
19783 size_t relevant_count = 0;
19786 relevant_endpoints[j] =
true;
19793 relevant_endpoints[j] =
true;
19800 if(relevant_count == 0) {
19806 size_t clone_times = 1;
19808 if(endpointUrl->
length == 0) {
19809 clone_times = server->config.networkLayersSize;
19810 nl_endpointurl =
true;
19822 for(
size_t i = 0; i < clone_times; ++i) {
19824 endpointUrl = &server->config.networkLayers[i].discoveryUrl;
19826 if(!relevant_endpoints[j])
19860 "Connection %i | SecureChannel %i | OpenSecureChannel: Opened SecureChannel",
19864 "Connection %i | OpenSecureChannel: Opening a SecureChannel failed",
19873 "Connection %i | SecureChannel %i | OpenSecureChannel: SecureChannel renewed",
19877 "Connection %i | OpenSecureChannel: Renewing SecureChannel failed",
19916 UA_Session *newSession;
19920 UA_LOG_DEBUG_CHANNEL(server->config.logger, channel,
"Processing CreateSessionRequest failed");
19947 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: SecureChannel %i wants " 19956 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: SecureChannel %i wants " 19972 if(server->config.enableAnonymousLogin &&
19980 }
else if(server->config.enableUsernamePasswordLogin &&
20002 for(
size_t i = 0; i < server->config.usernamePasswordLoginsSize; ++i) {
20003 UA_String *user = &server->config.usernamePasswordLogins[i].username;
20004 UA_String *pw = &server->config.usernamePasswordLogins[i].password;
20012 "ActivateSession: Did not find matching username/password");
20024 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: Detach from old channel");
20032 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: Session activated");
20049 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 20056 UA_Variant_init(v);
20058 v->
data = (
void*)(uintptr_t)p;
20086 compatibleValueRankArrayDimensions(
UA_Int32 valueRank,
size_t arrayDimensionsSize) {
20087 switch(valueRank) {
20089 if(arrayDimensionsSize > 1)
20095 if(arrayDimensionsSize > 0)
20099 if(arrayDimensionsSize < 1)
20107 if(arrayDimensionsSize != (
size_t)valueRank)
20121 if(!UA_Variant_isScalar(value))
20123 return compatibleValueRankArrayDimensions(valueRank, arrayDims);
20128 const UA_UInt32 *constraintArrayDimensions,
20129 size_t testArrayDimensionsSize,
20130 const UA_UInt32 *testArrayDimensions) {
20132 if(constraintArrayDimensionsSize == 0) {
20137 if(testArrayDimensionsSize != constraintArrayDimensionsSize)
20141 for(
size_t i = 0; i < constraintArrayDimensionsSize; ++i) {
20142 if(constraintArrayDimensions[i] != testArrayDimensions[i] &&
20143 constraintArrayDimensions[i] != 0)
20152 convertToMatchingValue(UA_Server *server,
const UA_Variant *value,
20155 if(!targetDataType)
20162 UA_Variant_isScalar(value)) {
20168 return editableValue;
20176 *editableValue = *value;
20178 editableValue->
type = targetDataType;
20179 return editableValue;
20195 UA_Int32 targetValueRank,
size_t targetArrayDimensionsSize,
20216 value = convertToMatchingValue(server, value, targetDataTypeId, editableValue);
20227 if(valueArrayDimensions == 0 && !UA_Variant_isScalar(value)) {
20228 valueArrayDimensionsSize = 1;
20230 valueArrayDimensions = &tempArrayDimensions;
20235 if(targetArrayDimensionsSize > 0)
20237 valueArrayDimensionsSize, valueArrayDimensions);
20240 return compatibleValueRankValue(targetValueRank, value);
20257 writeArrayDimensionsAttribute(UA_Server *server,
UA_VariableNode *node,
20258 size_t arrayDimensionsSize,
UA_UInt32 *arrayDimensions) {
20266 UA_StatusCode retval = compatibleValueRankArrayDimensions(node->valueRank, arrayDimensionsSize);
20269 "The current value rank does not match the new array dimensions");
20280 if(vt->arrayDimensions) {
20282 arrayDimensionsSize, arrayDimensions);
20285 "Array dimensions in the variable type do not match");
20292 UA_DataValue_init(&value);
20300 UA_DataValue_deleteMembers(&value);
20303 "Array dimensions in the current value do not match");
20309 UA_UInt32 *oldArrayDimensions = node->arrayDimensions;
20310 retval =
UA_Array_copy(arrayDimensions, arrayDimensionsSize,
20315 node->arrayDimensionsSize = arrayDimensionsSize;
20324 writeValueRankAttributeWithVT(UA_Server *server,
UA_VariableNode *node,
20342 switch(constraintValueRank) {
20344 if(valueRank != -1 && valueRank != 1)
20350 if(valueRank != -1)
20358 if(valueRank != constraintValueRank)
20365 size_t arrayDims = node->arrayDimensionsSize;
20367 if(arrayDims == 0) {
20371 UA_DataValue_init(&value);
20377 if(!UA_Variant_isScalar(&value.
value))
20379 UA_DataValue_deleteMembers(&value);
20381 retval = compatibleValueRankArrayDimensions(valueRank, arrayDims);
20387 node->valueRank = valueRank;
20396 writeDataTypeAttributeWithVT(UA_Server *server,
UA_VariableNode *node,
20417 constraintDataType, &subtypeId, 1))
20422 UA_DataValue_init(&value);
20428 node->arrayDimensionsSize, node->arrayDimensions,
20430 UA_DataValue_deleteMembers(&value);
20433 "The current value does not match the new data type");
20440 retval = UA_NodeId_copy(dataType, &node->dataType);
20442 node->dataType = dtCopy;
20445 UA_NodeId_deleteMembers(&dtCopy);
20456 if(vn->value.data.callback.onRead) {
20458 vn->value.data.callback.onRead(vn->value.data.callback.handle,
20459 vn->nodeId, &vn->value.data.value.value, rangeptr);
20461 #ifdef UA_ENABLE_MULTITHREADING 20468 *v = vn->value.data.value;
20477 if(!vn->value.dataSource.read)
20484 vn->value.dataSource.read(vn->value.dataSource.handle, vn->nodeId,
20485 sourceTimeStamp, rangeptr, v);
20491 readValueAttributeComplete(UA_Server *server,
const UA_VariableNode *vn,
20498 if(indexRange && indexRange->
length > 0) {
20507 retval = readValueAttributeFromNode(server, vn, v, rangeptr);
20509 retval = readValueAttributeFromDataSource(vn, v, timestamps, rangeptr);
20525 UA_StatusCode retval = UA_DataValue_copy(value, &node->value.data.value);
20527 UA_DataValue_deleteMembers(&old_value);
20529 node->value.data.value = old_value;
20537 if(value->
status != node->value.data.value.status ||
20538 !value->
hasValue || !node->value.data.value.hasValue)
20544 if(UA_Variant_isScalar(&value->
value)) {
20545 editableValue = value->
value;
20547 v = &editableValue;
20557 node->value.data.value.hasStatus = value->
hasStatus;
20558 node->value.data.value.status = value->
status;
20573 if(indexRange && indexRange->
length > 0) {
20587 retval =
typeCheckValue(server, &node->dataType, node->valueRank,
20588 node->arrayDimensionsSize, node->arrayDimensions,
20589 &value->
value, rangeptr, &editableValue.
value);
20603 retval = writeValueAttributeWithoutRange(node, &editableValue);
20605 retval = writeValueAttributeWithRange(node, &editableValue, rangeptr);
20610 #ifdef UA_ENABLE_MULTITHREADING 20614 writtenNode = node;
20618 writtenNode->value.data.callback.onWrite(writtenNode->value.data.callback.handle,
20619 writtenNode->nodeId,
20620 &writtenNode->value.data.value.value, rangeptr);
20624 if(node->value.dataSource.write) {
20626 retval = node->value.dataSource.write(node->value.dataSource.handle,
20627 node->nodeId, &editableValue.
value, rangeptr);
20646 readIsAbstractAttribute(
const UA_Node *node,
UA_Variant *v) {
20648 switch(node->nodeClass) {
20669 writeIsAbstractAttribute(UA_Node *node,
UA_Boolean value) {
20670 switch(node->nodeClass) {
20693 static const UA_String binEncoding = {
sizeof(
"Default Binary")-1, (
UA_Byte*)
"Default Binary"};
20696 #define CHECK_NODECLASS(CLASS) \ 20697 if(!(node->nodeClass & (CLASS))) { \ 20698 retval = UA_STATUSCODE_BADATTRIBUTEIDINVALID; \ 20747 forceVariantSetScalar(&v->
value, &node->description, &
UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
20753 forceVariantSetScalar(&v->
value, &node->userWriteMask, &
UA_TYPES[UA_TYPES_UINT32]);
20756 retval = readIsAbstractAttribute(node, &v->
value);
20766 &
UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
20770 forceVariantSetScalar(&v->
value, &((
const UA_ViewNode*)node)->containsNoLoops,
20775 forceVariantSetScalar(&v->
value, &((
const UA_ViewNode*)node)->eventNotifier,
20780 retval = readValueAttributeComplete(server, (
const UA_VariableNode*)node,
20795 retval = readArrayDimensionsAttribute((
const UA_VariableNode*)node, v);
20882 if(request->
maxAge < 0) {
20887 for(
size_t i = 0;i < size;++i) {
20892 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 20898 UA_ExtensionObject_init(&additionalHeader);
20903 UA_Variant_init(&variant);
20908 variant.
data = expireArray;
20939 UA_DataValue_init(&dv);
20953 UA_ReadValueId_init(&item);
20965 UA_DataValue_deleteMembers(&dv);
20974 retval = UA_Variant_copy(&dv.
value, v);
20999 #define CHECK_DATATYPE_SCALAR(EXP_DT) \ 21000 if(!wvalue->value.hasValue || \ 21001 &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type || \ 21002 !UA_Variant_isScalar(&wvalue->value.value)) { \ 21003 retval = UA_STATUSCODE_BADTYPEMISMATCH; \ 21007 #define CHECK_DATATYPE_ARRAY(EXP_DT) \ 21008 if(!wvalue->value.hasValue || \ 21009 &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type || \ 21010 UA_Variant_isScalar(&wvalue->value.value)) { \ 21011 retval = UA_STATUSCODE_BADTYPEMISMATCH; \ 21015 #define CHECK_NODECLASS_WRITE(CLASS) \ 21016 if((node->nodeClass & (CLASS)) == 0) { \ 21017 retval = UA_STATUSCODE_BADNODECLASSINVALID; \ 21024 CopyAttributeIntoNode(UA_Server *server, UA_Session *session,
21035 UA_QualifiedName_deleteMembers(&node->browseName);
21036 UA_QualifiedName_copy(value, &node->browseName);
21040 UA_LocalizedText_deleteMembers(&node->displayName);
21041 UA_LocalizedText_copy(value, &node->displayName);
21045 UA_LocalizedText_deleteMembers(&node->description);
21046 UA_LocalizedText_copy(value, &node->description);
21050 node->writeMask = *(
const UA_UInt32*)value;
21054 node->userWriteMask = *(
const UA_UInt32*)value;
21058 retval = writeIsAbstractAttribute(node, *(
const UA_Boolean*)value);
21099 retval = writeArrayDimensionsAttribute(server, (
UA_VariableNode*)node,
21139 "WriteRequest returned status code %s",
21140 UA_StatusCode_name(retval));
21182 const void *attr) {
21184 UA_WriteValue_init(&wvalue);
21185 wvalue.
nodeId = *nodeId;
21209 addReference(UA_Server *server, UA_Session *session,
21213 deleteReference(UA_Server *server, UA_Session *session,
21217 deleteNode(UA_Server *server, UA_Session *session,
21228 checkParentReference(UA_Server *server, UA_Session *session,
UA_NodeClass nodeClass,
21239 "AddNodes: Parent node not found");
21246 if(!referenceType) {
21248 "AddNodes: Reference type to the parent not found");
21255 "AddNodes: Reference type to the parent invalid");
21262 "AddNodes: Abstract reference type to the parent not allowed");
21275 "AddNodes: New type node need to have a " 21276 "HasSubType reference");
21280 if(parent->nodeClass != nodeClass) {
21282 "AddNodes: New type node needs to be of the same " 21283 "node type as the parent");
21290 const UA_NodeId hierarchicalReference =
21293 &hierarchicalReference, &subtypeId, 1)) {
21295 "AddNodes: Reference type is not hierarchical");
21307 Service_AddNodes_single(UA_Server *server, UA_Session *session,
21309 UA_InstantiationCallback *instantiationCallback);
21312 copyChildNodesToNode(UA_Server *server, UA_Session *session,
21314 UA_InstantiationCallback *instantiationCallback);
21319 copyExistingVariable(UA_Server *server, UA_Session *session,
const UA_NodeId *variable,
21321 UA_InstantiationCallback *instantiationCallback) {
21331 UA_DataValue_init(&value);
21338 UA_VariableAttributes_init(&attr);
21354 UA_AddNodesItem_init(&item);
21371 UA_AddNodesResult_init(&res);
21372 Service_AddNodes_single(server, session, &item, &res, instantiationCallback);
21377 retval = copyChildNodesToNode(server, session, &node->nodeId,
21381 instantiationCallback->method(res.
addedNodeId, node->nodeId,
21382 instantiationCallback->handle);
21387 UA_Variant_deleteMembers(&value.
value);
21394 copyExistingObject(UA_Server *server, UA_Session *session,
const UA_NodeId *
object,
21396 UA_InstantiationCallback *instantiationCallback) {
21406 UA_ObjectAttributes_init(&attr);
21414 UA_AddNodesItem_init(&item);
21429 UA_AddNodesResult_init(&res);
21430 Service_AddNodes_single(server, session, &item, &res, instantiationCallback);
21436 UA_StatusCode retval = copyChildNodesToNode(server, session, &node->nodeId,
21439 instantiationCallback->method(res.
addedNodeId, node->nodeId,
21440 instantiationCallback->handle);
21447 setObjectInstanceHandle(UA_Server *server, UA_Session *session,
21457 instantiateNode(UA_Server *server, UA_Session *session,
const UA_NodeId *nodeId,
21459 UA_InstantiationCallback *instantiationCallback) {
21478 size_t hierarchySize = 0;
21485 for(
size_t i = 0; i < hierarchySize; ++i)
21486 retval |= copyChildNodesToNode(server, session, &hierarchy[i], nodeId, instantiationCallback);
21493 const UA_ObjectLifecycleManagement *olm =
21495 if(olm->constructor)
21503 UA_AddReferencesItem_init(&addref);
21508 return addReference(server, session, &addref);
21514 instanceFindAggregateByBrowsename(UA_Server *server, UA_Session *session,
21519 UA_BrowseDescription_init(&bd);
21520 bd.
nodeId = *searchInstance;
21528 UA_BrowseResult_init(&br);
21538 retval = UA_NodeId_copy(&rd->
nodeId.
nodeId, outInstanceNodeId);
21543 UA_BrowseResult_deleteMembers(&br);
21548 mandatoryChild(UA_Server *server, UA_Session *session,
const UA_NodeId *childNodeId) {
21558 for(
size_t i = 0; i < child->referencesSize; ++i) {
21579 copyChildNodesToNode(UA_Server* server, UA_Session* session,
21581 UA_InstantiationCallback* instantiationCallback) {
21584 UA_BrowseDescription_init(&bd);
21585 bd.
nodeId = *sourceNodeId;
21594 UA_BrowseResult_init(&br);
21606 if(!mandatoryChild(server, session, &rd->
nodeId.
nodeId))
21613 retval = instanceFindAggregateByBrowsename(server, session, destinationNodeId,
21623 UA_AddReferencesItem_init(&newItem);
21629 retval = addReference(server, session, &newItem);
21631 retval = copyExistingVariable(server, session, &rd->
nodeId.
nodeId,
21633 instantiationCallback);
21635 retval = copyExistingObject(server, session, &rd->
nodeId.
nodeId,
21637 instantiationCallback);
21650 retval = copyChildNodesToNode(server, session, &rd->
nodeId.
nodeId,
21651 &existingChild, instantiationCallback);
21653 UA_NodeId_deleteMembers(&existingChild);
21658 UA_BrowseResult_deleteMembers(&br);
21666 UA_InstantiationCallback *instantiationCallback,
21678 UA_StatusCode retval = checkParentReference(server, session, node->nodeClass,
21679 parentNodeId, referenceTypeId);
21682 "AddNodes: Checking the reference to the parent returned " 21683 "error code %s", UA_StatusCode_name(retval));
21692 "AddNodes: Node could not be added to the nodestore " 21693 "with error code %s", UA_StatusCode_name(retval));
21699 retval = UA_NodeId_copy(&node->nodeId, addedNodeId);
21702 "AddNodes: Could not copy the nodeid");
21710 UA_AddReferencesItem_init(&item);
21715 retval = addReference(server, session, &item);
21718 "AddNodes: Could not add the reference to the parent" 21719 "with error code %s", UA_StatusCode_name(retval));
21731 typeDefinition = &basedatavariabletype;
21733 typeDefinition = &baseobjecttype;
21737 retval = instantiateNode(server, session, &node->nodeId, node->nodeClass,
21738 typeDefinition, instantiationCallback);
21741 "AddNodes: Could not instantiate the node with" 21742 "error code %s", UA_StatusCode_name(retval));
21748 if(instantiationCallback)
21749 instantiationCallback->method(node->nodeId, *typeDefinition,
21750 instantiationCallback->handle);
21754 deleteNode(server, &adminSession, &node->nodeId,
true);
21767 retval |= UA_QualifiedName_copy(&item->
browseName, &node->browseName);
21768 retval |= UA_LocalizedText_copy(&attr->
displayName, &node->displayName);
21769 retval |= UA_LocalizedText_copy(&attr->
description, &node->description);
21776 copyCommonVariableAttributes(UA_Server *server,
UA_VariableNode *node,
21783 typeDef = &basedatavartype;
21790 node->valueRank = -2;
21805 retval = UA_NodeId_copy(&vt->dataType, &node->dataType);
21818 "Array dimensions incompatible with the VariableType " 21819 "with error code %s", UA_StatusCode_name(retval));
21828 node->valueRank = vt->valueRank;
21831 "Value Rank incompatible with the VariableType " 21832 "with error code %s", UA_StatusCode_name(retval));
21838 UA_DataValue_init(&value);
21848 "Could not read the value of the variable type " 21849 "with error code %s", UA_StatusCode_name(retval));
21858 "Could not set the value of the new node " 21859 "with error code %s", UA_StatusCode_name(retval));
21861 UA_DataValue_deleteMembers(&value);
21866 copyVariableNodeAttributes(UA_Server *server,
UA_VariableNode *vnode,
21873 return copyCommonVariableAttributes(server, vnode, item, attr);
21881 return copyCommonVariableAttributes(server, (
UA_VariableNode*)vtnode, item,
21920 #define CHECK_ATTRIBUTES(TYPE) \ 21921 if(item->nodeAttributes.content.decoded.type != &UA_TYPES[UA_TYPES_##TYPE]) { \ 21922 retval = UA_STATUSCODE_BADNODEATTRIBUTESINVALID; \ 21927 createNodeFromAttributes(UA_Server *server,
const UA_AddNodesItem *item, UA_Node **newNode) {
21941 UA_StatusCode retval = copyStandardAttributes(node, item, data);
21945 retval |= copyObjectNodeAttributes(node, data);
21949 retval |= copyVariableNodeAttributes(server, node, item, data);
21953 retval |= copyObjectTypeNodeAttributes(node, data);
21957 retval |= copyVariableTypeNodeAttributes(server, node, item, data);
21961 retval |= copyReferenceTypeNodeAttributes(node, data);
21965 retval |= copyDataTypeNodeAttributes(node, data);
21969 retval |= copyViewNodeAttributes(node, data);
21985 Service_AddNodes_single(UA_Server *server, UA_Session *session,
21987 UA_InstantiationCallback *instantiationCallback) {
21989 UA_Node *node =
NULL;
21990 result->
statusCode = createNodeFromAttributes(server, item, &node);
21993 "Could not add node with error code %s",
22005 "Could not add node with error code %s",
22028 for(
size_t i = 0; i < size; ++i) {
22029 Service_AddNodes_single(server, session, &request->
nodesToAdd[i],
22040 UA_InstantiationCallback *instantiationCallback,
UA_NodeId *outNewNodeId) {
22043 UA_AddNodesItem_init(&item);
22052 .content.decoded = {attributeType, (
void*)(uintptr_t)attr}};
22056 UA_AddNodesResult_init(&result);
22058 Service_AddNodes_single(server, &adminSession, &item, &result, instantiationCallback);
22088 UA_DataValue_init(&value);
22089 if(dataSource.read)
22090 retval = dataSource.read(dataSource.handle, requestedNewNodeId,
22091 false,
NULL, &value);
22104 UA_AddNodesItem_init(&item);
22109 retval |= copyStandardAttributes((UA_Node*)node, &item, (
const UA_NodeAttributes*)&editAttr);
22110 retval |= copyVariableNodeAttributes(server, node, &item, &editAttr);
22111 UA_DataValue_deleteMembers(&node->value.data.value);
22113 node->value.dataSource = dataSource;
22114 UA_DataValue_deleteMembers(&value);
22123 UA_AddNodesResult_init(&result);
22125 &referenceTypeId, &typeDefinition,
NULL, outNewNodeId);
22130 #ifdef UA_ENABLE_METHODCALLS 22133 UA_Server_addMethodNode(UA_Server *server,
const UA_NodeId requestedNewNodeId,
22136 UA_MethodCallback method,
void *handle,
22137 size_t inputArgumentsSize,
const UA_Argument* inputArguments,
22138 size_t outputArgumentsSize,
const UA_Argument* outputArguments,
22145 UA_AddNodesItem_init(&item);
22148 copyStandardAttributes((UA_Node*)node, &item, (
const UA_NodeAttributes*)&attr);
22149 node->executable = attr.executable;
22150 node->userExecutable = attr.userExecutable;
22151 node->attachedMethod = method;
22152 node->methodHandle = handle;
22156 UA_NodeId_init(&newMethodId);
22159 &referenceTypeId, &UA_NODEID_NULL,
NULL, &newMethodId);
22167 if(inputArgumentsSize > 0) {
22168 UA_VariableNode *inputArgumentsVariableNode = UA_NodeStore_newVariableNode();
22169 inputArgumentsVariableNode->nodeId.namespaceIndex = newMethodId.
namespaceIndex;
22170 inputArgumentsVariableNode->browseName = UA_QUALIFIEDNAME_ALLOC(0,
"InputArguments");
22171 inputArgumentsVariableNode->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"InputArguments");
22172 inputArgumentsVariableNode->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"InputArguments");
22173 inputArgumentsVariableNode->valueRank = 1;
22184 inputArgumentsVariableNode->nodeId =
22188 inputArguments, inputArgumentsSize,
22190 inputArgumentsVariableNode->value.data.value.hasValue =
true;
22194 &newMethodId, &hasproperty, &propertytype,
NULL,
NULL);
22198 if(outputArgumentsSize > 0) {
22200 UA_VariableNode *outputArgumentsVariableNode = UA_NodeStore_newVariableNode();
22201 outputArgumentsVariableNode->nodeId.namespaceIndex = newMethodId.
namespaceIndex;
22202 outputArgumentsVariableNode->browseName = UA_QUALIFIEDNAME_ALLOC(0,
"OutputArguments");
22203 outputArgumentsVariableNode->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OutputArguments");
22204 outputArgumentsVariableNode->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OutputArguments");
22205 outputArgumentsVariableNode->valueRank = 1;
22210 outputArgumentsVariableNode->nodeId =
22214 outputArguments, outputArgumentsSize,
22216 outputArgumentsVariableNode->value.data.value.hasValue =
true;
22220 &newMethodId, &hasproperty, &propertytype,
NULL,
NULL);
22225 *outNewNodeId = newMethodId;
22227 UA_NodeId_deleteMembers(&newMethodId);
22238 deleteOneWayReference(UA_Server *server, UA_Session *session, UA_Node *node,
22243 addOneWayReference(UA_Server *server, UA_Session *session,
22245 size_t i = node->referencesSize;
22246 size_t refssize = (i+1) | 3;
22250 node->references = new_refs;
22251 UA_ReferenceNode_init(&new_refs[i]);
22256 node->referencesSize = i+1;
22258 UA_ReferenceNode_deleteMembers(&new_refs[i]);
22263 addReference(UA_Server *server, UA_Session *session,
22280 UA_AddReferencesItem_init(&secondItem);
22309 "Processing AddReferencesRequest");
22322 for(
size_t i = 0; i < response->
resultsSize; ++i)
22332 UA_AddReferencesItem_init(&item);
22338 UA_StatusCode retval = addReference(server, &adminSession, &item);
22348 removeReferences(UA_Server *server, UA_Session *session,
const UA_Node *node) {
22350 UA_DeleteReferencesItem_init(&item);
22352 for(
size_t i = 0; i < node->referencesSize; ++i) {
22353 item.
isForward = node->references[i].isInverse;
22354 item.
sourceNodeId = node->references[i].targetId.nodeId;
22356 deleteReference(server, session, &item);
22361 deleteNode(UA_Server *server, UA_Session *session,
22380 if(deleteReferences)
22381 removeReferences(server, session, node);
22390 "Processing DeleteNodesRequest");
22405 response->
results[i] = deleteNode(server, session, &item->
nodeId,
22415 &nodeId, deleteReferences);
22426 deleteOneWayReference(UA_Server *server, UA_Session *session, UA_Node *node,
22429 for(
size_t i = node->referencesSize; i > 0; --i) {
22437 UA_ReferenceNode_deleteMembers(ref);
22439 node->references[i-1] = node->references[node->referencesSize-1];
22440 --node->referencesSize;
22447 if(node->referencesSize == 0 && node->references) {
22449 node->references =
NULL;
22455 deleteReference(UA_Server *server, UA_Session *session,
22464 UA_DeleteReferencesItem_init(&secondItem);
22478 "Processing DeleteReferencesRequest");
22508 UA_StatusCode retval = deleteReference(server, &adminSession, &item);
22518 setValueCallback(UA_Server *server, UA_Session *session,
22522 node->value.data.callback = *callback;
22528 const UA_ValueCallback callback) {
22541 setDataSource(UA_Server *server, UA_Session *session,
22546 UA_DataValue_deleteMembers(&node->value.data.value);
22547 node->value.dataSource = *dataSource;
22554 const UA_DataSource dataSource) {
22567 setOLM(UA_Server *server, UA_Session *session,
22577 UA_ObjectLifecycleManagement olm) {
22589 #ifdef UA_ENABLE_METHODCALLS 22591 struct addMethodCallback {
22592 UA_MethodCallback callback;
22597 editMethodCallback(UA_Server *server, UA_Session* session,
22598 UA_Node* node,
const void* handle) {
22601 const struct addMethodCallback *newCallback = handle;
22609 UA_Server_setMethodNode_callback(UA_Server *server,
const UA_NodeId methodNodeId,
22610 UA_MethodCallback method,
void *handle) {
22611 struct addMethodCallback cb = { method, handle };
22614 &methodNodeId, editMethodCallback, &cb);
22631 UA_ReferenceDescription_init(descr);
22638 retval |= UA_NodeClass_copy(&curr->nodeClass, &descr->
nodeClass);
22640 retval |= UA_QualifiedName_copy(&curr->browseName, &descr->
browseName);
22642 retval |= UA_LocalizedText_copy(&curr->displayName, &descr->
displayName);
22645 for(
size_t i = 0; i < curr->referencesSize; ++i) {
22660 static const UA_Node *
22673 for(
size_t i = 0; i < relevant_count; ++i) {
22675 is_relevant =
true;
22688 *isExternal =
false;
22694 UA_ByteString_deleteMembers(&cp->identifier);
22695 UA_BrowseDescription_deleteMembers(&cp->browseDescription);
22715 size_t referencesCount = 0;
22716 size_t referencesIndex = 0;
22721 descr = &cp->browseDescription;
22722 maxrefs = cp->maxReferences;
22723 continuationIndex = cp->continuationIndex;
22735 size_t relevant_refs_size = 0;
22746 &relevant_refs, &relevant_refs_size);
22751 relevant_refs_size = 1;
22765 if(node->referencesSize == 0) {
22773 size_t real_maxrefs = maxrefs;
22774 if(real_maxrefs == 0)
22775 real_maxrefs = node->referencesSize;
22776 else if(real_maxrefs > node->referencesSize)
22777 real_maxrefs = node->referencesSize;
22785 size_t skipped = 0;
22788 for(; referencesIndex < node->referencesSize && referencesCount < real_maxrefs; ++referencesIndex) {
22789 isExternal =
false;
22790 const UA_Node *current =
22791 returnRelevantNode(server, descr, all_refs, &node->references[referencesIndex],
22792 relevant_refs, relevant_refs_size, &isExternal);
22796 if(skipped < continuationIndex) {
22799 retval |= fillReferenceDescription(server->
nodestore, current,
22800 &node->references[referencesIndex],
22808 if(referencesCount == 0) {
22816 &
UA_TYPES[UA_TYPES_REFERENCEDESCRIPTION]);
22830 if(referencesIndex == node->referencesSize) {
22832 removeCp(cp, session);
22835 cp->continuationIndex += (
UA_UInt32)referencesCount;
22838 }
else if(maxrefs != 0 && referencesCount >= maxrefs) {
22842 LIST_FOREACH(cpLoop, &session->continuationPoints, pointers) {
22847 removeCp(cpLast, session);
22857 UA_BrowseDescription_copy(descr, &cp->browseDescription);
22858 cp->maxReferences = maxrefs;
22859 cp->continuationIndex = (
UA_UInt32) referencesCount;
22860 UA_Guid *ident = UA_Guid_new();
22862 cp->identifier.data = (
UA_Byte*) ident;
22863 cp->identifier.length =
sizeof(
UA_Guid);
22894 for(
size_t i = 0; i < size; ++i) {
22903 UA_BrowseResult_init(&result);
22911 UA_Server_browseNext_single(UA_Server *server, UA_Session *session,
UA_Boolean releaseContinuationPoint,
22916 if(UA_ByteString_equal(&cp->identifier, continuationPoint)) {
22918 if(!releaseContinuationPoint)
22921 removeCp(cp, session);
22942 for(
size_t i = 0; i < size; ++i)
22951 UA_BrowseResult_init(&result);
22953 UA_Server_browseNext_single(server, &adminSession, releaseContinuationPoint,
22954 continuationPoint, &result);
22965 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount,
22967 const UA_NodeId *reftypes,
size_t reftypes_count,
22976 for(
size_t j = 0; j < reftypes_count; ++j) {
22995 result->
targets = tempTargets;
22996 (*targetsSize) *= 2;
23004 if(*nextSize <= *nextCount) {
23014 &(*next)[*nextCount]);
23019 walkBrowsePathElement(UA_Server *server, UA_Session *session,
23023 const UA_NodeId *current,
const size_t currentCount,
23024 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount) {
23027 size_t reftypes_count = 1;
23044 for(
size_t i = 0; i < currentCount; ++i) {
23056 if(targetName && (targetName->
namespaceIndex != node->browseName.namespaceIndex ||
23062 for(
size_t r = 0; r < node->referencesSize &&
23065 walkBrowsePathElementNodeReference(result, targetsSize, next, nextSize, nextCount,
23067 reftypes, reftypes_count, reference);
23077 addBrowsePathTargets(UA_Server *server, UA_Session *session,
UA_BrowsePathResult *result,
23079 for(
size_t i = 0; i < currentCount; i++) {
23083 UA_NodeId_deleteMembers(¤t[i]);
23089 if(targetName->
namespaceIndex != node->browseName.namespaceIndex ||
23091 UA_NodeId_deleteMembers(¤t[i]);
23104 walkBrowsePath(UA_Server *server, UA_Session *session,
const UA_BrowsePath *path,
23106 UA_NodeId **current,
size_t *currentSize,
size_t *currentCount,
23107 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount) {
23117 walkBrowsePathElement(server, session, result, &targetsSize,
23119 *current, *currentCount, next, nextSize, nextCount);
23122 for(
size_t j = 0; j < *currentCount; j++)
23123 UA_NodeId_deleteMembers(&(*current)[j]);
23135 size_t tSize = *currentSize;
size_t tCount = *currentCount;
UA_NodeId *tT = *current;
23136 *currentSize = *nextSize; *currentCount = *nextCount; *current = *next;
23137 *nextSize = tSize; *nextCount = tCount; *next = tT;
23150 if(targetsSize < result->targetsSize + (*currentCount)) {
23156 for(
size_t i = 0; i < *currentCount; ++i)
23157 UA_NodeId_deleteMembers(&(*current)[i]);
23161 result->
targets = newTargets;
23165 addBrowsePathTargets(server, session, result, targetName, *current, *currentCount);
23170 translateBrowsePathToNodeIds(UA_Server *server, UA_Session *session,
23186 size_t targetsSize = 10;
23197 size_t currentSize = 10;
23198 size_t currentCount = 0;
23205 size_t nextSize = 10;
23206 size_t nextCount = 0;
23226 walkBrowsePath(server, session, path, result, targetsSize,
23227 ¤t, ¤tSize, ¤tCount,
23228 &next, &nextSize, &nextCount);
23242 UA_BrowsePathTarget_deleteMembers(&result->
targets[i]);
23253 UA_BrowsePathResult_init(&result);
23255 translateBrowsePathToNodeIds(server, &adminSession, browsePath, &result);
23263 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing TranslateBrowsePathsToNodeIdsRequest");
23277 for(
size_t i = 0; i < size; ++i)
23278 translateBrowsePathToNodeIds(server, session, &request->
browsePaths[i],
23315 #ifdef UA_ENABLE_METHODCALLS 23318 getArgumentsVariableNode(UA_Server *server,
const UA_MethodNode *ofMethod,
23321 for(
size_t i = 0; i < ofMethod->referencesSize; ++i) {
23322 if(ofMethod->references[i].isInverse ==
false &&
23323 UA_NodeId_equal(&hasProperty, &ofMethod->references[i].referenceTypeId)) {
23324 const UA_Node *refTarget =
23329 refTarget->browseName.namespaceIndex == 0 &&
23339 argumentsConformsToDefinition(UA_Server *server,
const UA_VariableNode *argRequirements,
23344 size_t argReqsSize = argRequirements->value.data.value.value.arrayLength;
23347 if(UA_Variant_isScalar(&argRequirements->value.data.value.value))
23349 if(argReqsSize > argsSize)
23351 if(argReqsSize != argsSize)
23355 for(
size_t i = 0; i < argReqsSize; ++i)
23356 retval |=
typeCheckValue(server, &argReqs[i].dataType, argReqs[i].valueRank,
23357 argReqs[i].arrayDimensionsSize, argReqs[i].arrayDimensions,
23358 &args[i],
NULL, &args[i]);
23369 if(!methodCalled) {
23401 for(
size_t i = 0; i < methodCalled->referencesSize; ++i) {
23402 if(methodCalled->references[i].isInverse &&
23403 UA_NodeId_equal(&methodCalled->references[i].targetId.nodeId, &withObject->nodeId)) {
23405 &hasComponentNodeId, &hasSubTypeNodeId, 1);
23417 getArgumentsVariableNode(server, methodCalled, UA_STRING(
"InputArguments"));
23419 if(!inputArguments) {
23425 result->
statusCode = argumentsConformsToDefinition(server, inputArguments,
23435 getArgumentsVariableNode(server, methodCalled, UA_STRING(
"OutputArguments"));
23436 if(outputArguments) {
23447 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 23448 methodCallSession = session;
23453 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 23454 methodCallSession =
NULL;
23460 void Service_Call(UA_Server *server, UA_Session *session,
23485 UA_CallMethodResult_init(&result);
23500 #ifdef UA_ENABLE_SUBSCRIPTIONS 23502 #define UA_VALUENCODING_MAXSTACK 512 23512 new->subscription =
NULL;
23513 new->currentQueueSize = 0;
23514 new->maxQueueSize = 0;
23517 UA_String_init(&new->indexRange);
23519 UA_NodeId_init(&new->monitoredNodeId);
23521 memset(&new->sampleJobGuid, 0,
sizeof(
UA_Guid));
23522 new->sampleJobIsRegistered =
false;
23533 UA_DataValue_deleteMembers(&val->value);
23536 monitoredItem->currentQueueSize = 0;
23538 UA_String_deleteMembers(&monitoredItem->indexRange);
23539 UA_ByteString_deleteMembers(&monitoredItem->lastSampledValue);
23540 UA_NodeId_deleteMembers(&monitoredItem->monitoredNodeId);
23546 if(mon->currentQueueSize < mon->maxQueueSize)
23549 if(mon->discardOldest)
23552 queueItem =
TAILQ_LAST(&mon->queue, QueueOfQueueDataValues);
23555 UA_DataValue_deleteMembers(&queueItem->value);
23557 --mon->currentQueueSize;
23591 if(binsize > UA_VALUENCODING_MAXSTACK &&
23598 size_t encodingOffset = 0;
23600 NULL,
NULL, encoding, &encodingOffset);
23605 encoding->
length = encodingOffset;
23606 if(!mon->lastSampledValue.data || !
UA_String_equal(encoding, &mon->lastSampledValue))
23623 "Subscription %u | MonitoredItem %i | " 23624 "Not a data change notification",
23625 sub->subscriptionID, monitoredItem->itemId);
23631 UA_ReadValueId_init(&rvid);
23632 rvid.
nodeId = monitoredItem->monitoredNodeId;
23634 rvid.
indexRange = monitoredItem->indexRange;
23636 UA_DataValue_init(&value);
23643 valueEncoding.
data = stackValueEncoding;
23644 valueEncoding.
length = UA_VALUENCODING_MAXSTACK;
23648 UA_StatusCode retval = detectValueChange(monitoredItem, &value,
23649 &valueEncoding, &changed);
23655 if(!newQueueItem) {
23657 "Subscription %u | MonitoredItem %i | " 23658 "Item for the publishing queue could not be allocated",
23659 sub->subscriptionID, monitoredItem->itemId);
23664 if(valueEncoding.
data == stackValueEncoding) {
23668 "Subscription %u | MonitoredItem %i | " 23669 "ByteString to compare values could not be created",
23670 sub->subscriptionID, monitoredItem->itemId);
23674 valueEncoding = cbs;
23681 "Subscription %u | MonitoredItem %i | " 23682 "Item for the publishing queue could not be prepared",
23683 sub->subscriptionID, monitoredItem->itemId);
23688 newQueueItem->value = value;
23690 newQueueItem->clientHandle = monitoredItem->clientHandle;
23695 "Subscription %u | MonitoredItem %u | Sampled a new value",
23696 sub->subscriptionID, monitoredItem->itemId);
23699 UA_ByteString_deleteMembers(&monitoredItem->lastSampledValue);
23700 monitoredItem->lastSampledValue = valueEncoding;
23703 ensureSpaceInMonitoredItemQueue(monitoredItem);
23705 ++monitoredItem->currentQueueSize;
23709 if(valueEncoding.
data != stackValueEncoding)
23710 UA_ByteString_deleteMembers(&valueEncoding);
23711 UA_DataValue_deleteMembers(&value);
23717 job.
type = UA_JOBTYPE_METHODCALL;
23722 &mon->sampleJobGuid);
23724 mon->sampleJobIsRegistered =
true;
23729 if(!mon->sampleJobIsRegistered)
23731 mon->sampleJobIsRegistered =
false;
23743 new->session = session;
23744 new->subscriptionID = subscriptionID;
23745 new->sequenceNumber = 0;
23746 new->maxKeepAliveCount = 0;
23747 new->publishingEnabled =
false;
23748 memset(&new->publishJobGuid, 0,
sizeof(
UA_Guid));
23749 new->publishJobIsRegistered =
false;
23750 new->currentKeepAliveCount = 0;
23751 new->currentLifetimeCount = 0;
23752 new->lastMonitoredItemId = 0;
23756 new->retransmissionQueueSize = 0;
23773 TAILQ_REMOVE(&subscription->retransmissionQueue, nme, listEntry);
23774 UA_NotificationMessage_deleteMembers(&nme->message);
23777 subscription->retransmissionQueueSize = 0;
23784 if(mon->itemId == monitoredItemID)
23795 if(mon->itemId == monitoredItemID) {
23806 size_t notifications = 0;
23807 if(sub->publishingEnabled) {
23812 if(notifications >= sub->notificationsPerPublish) {
23813 *moreNotifications =
true;
23820 return notifications;
23824 UA_Subscription_addRetransmissionMessage(UA_Server *server,
UA_Subscription *sub,
23827 if(server->config.maxRetransmissionQueueSize > 0 &&
23828 sub->retransmissionQueueSize >= server->config.maxRetransmissionQueueSize) {
23830 TAILQ_LAST(&sub->retransmissionQueue, UA_ListOfNotificationMessages);
23831 TAILQ_REMOVE(&sub->retransmissionQueue, lastentry, listEntry);
23832 --sub->retransmissionQueueSize;
23833 UA_NotificationMessage_deleteMembers(&lastentry->message);
23839 ++sub->retransmissionQueueSize;
23846 if(entry->message.sequenceNumber != sequenceNumber)
23848 TAILQ_REMOVE(&sub->retransmissionQueue, entry, listEntry);
23849 --sub->retransmissionQueueSize;
23850 UA_NotificationMessage_deleteMembers(&entry->message);
23859 size_t notifications) {
23889 if(l >= notifications)
23893 min->
value = qv->value;
23896 --mon->currentQueueSize;
23903 UA_NotificationMessage_deleteMembers(message);
23909 "Publish Callback", sub->subscriptionID);
23913 size_t notifications = countQueuedNotifications(sub, &moreNotifications);
23916 if(notifications == 0) {
23917 ++sub->currentKeepAliveCount;
23918 if(sub->currentKeepAliveCount < sub->maxKeepAliveCount)
23921 "Subscription %u | Sending a KeepAlive",
23922 sub->subscriptionID)
23931 UA_PublishResponseEntry *pre =
SIMPLEQ_FIRST(&sub->session->responseQueue);
23936 "Subscription %u | Cannot send a publish response " 23937 "since the publish queue is empty", sub->subscriptionID)
23941 ++sub->currentLifetimeCount;
23942 if(sub->currentLifetimeCount > sub->lifeTimeCount) {
23944 "End of lifetime for subscription", sub->subscriptionID);
23945 UA_Session_deleteSubscription(server, sub->session, sub->subscriptionID);
23954 if(notifications > 0) {
23957 if(!retransmission) {
23959 "Subscription %u | Could not allocate memory " 23960 "for retransmission", sub->subscriptionID);
23965 prepareNotificationMessage(sub, message, notifications);
23968 "Subscription %u | Could not prepare the " 23969 "notification message", sub->subscriptionID);
23985 if(notifications == 0) {
23996 UA_Subscription_addRetransmissionMessage(server, sub, retransmission);
24000 size_t available = sub->retransmissionQueueSize;
24001 if(available > 0) {
24014 "Subscription %u | Sending out a publish response with %u " 24015 "notifications", sub->subscriptionID, (
UA_UInt32)notifications);
24021 sub->currentKeepAliveCount = 0;
24022 sub->currentLifetimeCount = 0;
24030 if(moreNotifications)
24036 if(sub->publishJobIsRegistered)
24040 "Subscription %u | Register subscription publishing callback",
24041 sub->subscriptionID);
24043 job.
type = UA_JOBTYPE_METHODCALL;
24048 &sub->publishJobGuid);
24050 sub->publishJobIsRegistered =
true;
24056 if(!sub->publishJobIsRegistered)
24059 "Subscription %u | Unregister subscription publishing callback",
24060 sub->subscriptionID);
24061 sub->publishJobIsRegistered =
false;
24071 UA_NodeId_delete(sessionToken);
24074 if(!session ||
LIST_FIRST(&session->serverSubscriptions))
24078 UA_PublishResponseEntry *pre;
24086 UA_PublishResponse_deleteMembers(response);
24100 #ifdef UA_ENABLE_SUBSCRIPTIONS 24102 #define UA_BOUNDEDVALUE_SETWBOUNDS(BOUNDS, SRC, DST) { \ 24103 if(SRC > BOUNDS.max) DST = BOUNDS.max; \ 24104 else if(SRC < BOUNDS.min) DST = BOUNDS.min; \ 24109 setSubscriptionSettings(UA_Server *server,
UA_Subscription *subscription,
24118 "Could not unregister publish job with error code 0x%08x",
24119 subscription->subscriptionID, retval);
24122 subscription->publishingInterval = requestedPublishingInterval;
24123 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.publishingIntervalLimits,
24124 requestedPublishingInterval, subscription->publishingInterval);
24126 if(requestedPublishingInterval != requestedPublishingInterval)
24127 subscription->publishingInterval = server->config.publishingIntervalLimits.min;
24128 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.keepAliveCountLimits,
24129 requestedMaxKeepAliveCount, subscription->maxKeepAliveCount);
24130 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.lifeTimeCountLimits,
24131 requestedLifetimeCount, subscription->lifeTimeCount);
24132 if(subscription->lifeTimeCount < 3 * subscription->maxKeepAliveCount)
24133 subscription->lifeTimeCount = 3 * subscription->maxKeepAliveCount;
24134 subscription->notificationsPerPublish = maxNotificationsPerPublish;
24135 if(maxNotificationsPerPublish == 0 ||
24136 maxNotificationsPerPublish > server->config.maxNotificationsPerPublish)
24137 subscription->notificationsPerPublish = server->config.maxNotificationsPerPublish;
24138 subscription->priority = priority;
24143 "Could not register publish job with error code 0x%08x",
24144 subscription->subscriptionID, retval);
24153 if(!newSubscription) {
24155 "Processing CreateSubscriptionRequest failed");
24159 newSubscription->subscriptionID = UA_Session_getUniqueSubscriptionID(session);
24160 UA_Session_addSubscription(session, newSubscription);
24167 newSubscription->currentKeepAliveCount = newSubscription->maxKeepAliveCount;
24176 "CreateSubscriptionRequest: Created Subscription %u " 24177 "with a publishing interval of %f ms", response->
subscriptionId,
24178 newSubscription->publishingInterval);
24186 "Processing ModifySubscriptionRequest");
24196 sub->currentLifetimeCount = 0;
24207 "Processing SetPublishingModeRequest");
24221 for(
size_t i = 0; i < size; ++i) {
24223 UA_Session_getSubscriptionByID(session, request->
subscriptionIds[i]);
24230 sub->currentLifetimeCount = 0;
24240 mon->monitoringMode = monitoringMode;
24251 samplingInterval < vn->minimumSamplingInterval)
24255 samplingInterval = 10000.0f;
24257 mon->samplingInterval = samplingInterval;
24258 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.samplingIntervalLimits,
24259 samplingInterval, mon->samplingInterval);
24260 if(samplingInterval != samplingInterval)
24261 mon->samplingInterval = server->config.samplingIntervalLimits.min;
24270 mon->trigger = filter->
trigger;
24274 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.queueSizeLimits,
24285 static const UA_String binaryEncoding = {
sizeof(
"Default Binary")-1, (
UA_Byte*)
"Default Binary"};
24289 Service_CreateMonitoredItems_single(UA_Server *server, UA_Session *session,
24298 UA_DataValue_init(&v);
24305 UA_DataValue_deleteMembers(&v);
24308 UA_DataValue_deleteMembers(&v);
24332 &newMon->monitoredNodeId);
24338 newMon->subscription = sub;
24340 newMon->itemId = ++(sub->lastMonitoredItemId);
24341 newMon->timestampsToReturn = timestampsToReturn;
24342 setMonitoredItemSettings(server, newMon, request->
monitoringMode,
24362 "Processing CreateMonitoredItemsRequest");
24377 sub->currentLifetimeCount = 0;
24392 Service_CreateMonitoredItems_single(server, session, sub, request->
timestampsToReturn,
24397 Service_ModifyMonitoredItems_single(UA_Server *server, UA_Session *session,
UA_Subscription *sub,
24406 setMonitoredItemSettings(server, mon, mon->monitoringMode,
24416 "Processing ModifyMonitoredItemsRequest");
24432 sub->currentLifetimeCount = 0;
24447 Service_ModifyMonitoredItems_single(server, session, sub, &request->
itemsToModify[i],
24474 for(
size_t i = 0; i < response->
resultsSize; ++i) {
24498 if(
LIST_EMPTY(&session->serverSubscriptions)) {
24503 UA_PublishResponseEntry *entry =
UA_malloc(
sizeof(UA_PublishResponseEntry));
24508 entry->requestId = requestId;
24512 UA_PublishResponse_init(response);
24532 "Cannot process acknowledgements subscription %u",
24547 LIST_FOREACH(immediate, &session->serverSubscriptions, listEntry) {
24550 "Response on a late subscription", immediate->subscriptionID,
24560 UA_PublishResponse_init(&err_response);
24574 "Processing DeleteSubscriptionsRequest");
24602 if(
LIST_FIRST(&session->serverSubscriptions))
24604 UA_NodeId *sessionToken = UA_NodeId_new();
24616 "Processing DeleteMonitoredItemsRequest");
24631 sub->currentLifetimeCount = 0;
24654 sub->currentLifetimeCount = 0;
24658 TAILQ_FOREACH(entry, &sub->retransmissionQueue, listEntry) {
24682 static void UA_Client_init(
UA_Client* client, UA_ClientConfig config) {
24685 client->
config = config;
24692 UA_Client_init(client, config);
24696 static void UA_Client_deleteMembers(
UA_Client* client) {
24702 UA_UserTokenPolicy_deleteMembers(&client->
token);
24705 UA_String_deleteMembers(&client->
username);
24707 UA_String_deleteMembers(&client->
password);
24708 #ifdef UA_ENABLE_SUBSCRIPTIONS 24709 UA_Client_NotificationsAckNumber *n, *tmp;
24714 UA_Client_Subscription *sub, *tmps;
24716 UA_Client_Subscriptions_forceDelete(client, sub);
24721 UA_Client_deleteMembers(client);
24722 UA_Client_init(client, client->
config);
24726 UA_Client_deleteMembers(client);
24732 return UA_CLIENTSTATE_ERRORED;
24733 return client->
state;
24740 #define UA_MINMESSAGESIZE 8192 24761 retval = UA_TcpHelloMessage_encodeBinary(&hello, &message, &offset);
24762 UA_TcpHelloMessage_deleteMembers(&hello);
24769 retval |= UA_TcpMessageHeader_encodeBinary(&messageHeader, &message, &offset);
24777 retval = conn->
send(conn, &message);
24780 "Sending HEL failed");
24784 "Sent HEL message");
24790 client->
config.timeout);
24793 "Receiving ACK message failed");
24800 retval = UA_TcpMessageHeader_decodeBinary(&reply, &offset, &messageHeader);
24801 retval |= UA_TcpAcknowledgeMessage_decodeBinary(&reply, &offset, &ackMessage);
24807 UA_ByteString_deleteMembers(&reply);
24826 UA_TcpAcknowledgeMessage_deleteMembers(&ackMessage);
24847 size_t offset = 12;
24851 UA_AsymmetricAlgorithmSecurityHeader_init(&asymHeader);
24852 asymHeader.
securityPolicyUri = UA_STRING(
"http://opcfoundation.org/UA/SecurityPolicy#None");
24853 retval = UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(&asymHeader, &message, &offset);
24859 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &message, &offset);
24864 retval |= UA_NodeId_encodeBinary(&requestType, &message, &offset);
24868 UA_OpenSecureChannelRequest_init(&opnSecRq);
24874 "Requesting to renew the SecureChannel");
24878 "Requesting to open a SecureChannel");
24883 retval |= UA_OpenSecureChannelRequest_encodeBinary(&opnSecRq, &message, &offset);
24894 retval |= UA_SecureConversationMessageHeader_encodeBinary(&messageHeader, &message, &offset);
24904 retval = conn->
send(conn, &message);
24912 client->
config.timeout);
24915 "Receiving OpenSecureChannelResponse failed");
24921 retval = UA_SecureConversationMessageHeader_decodeBinary(&reply, &offset, &messageHeader);
24922 retval |= UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(&reply, &offset, &asymHeader);
24923 retval |= UA_SequenceHeader_decodeBinary(&reply, &offset, &seqHeader);
24924 retval |= UA_NodeId_decodeBinary(&reply, &offset, &requestType);
24928 UA_ByteString_deleteMembers(&reply);
24929 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
24930 UA_NodeId_deleteMembers(&requestType);
24932 "Reply answers the wrong request. Expected OpenSecureChannelResponse.");
24941 retval = UA_OpenSecureChannelResponse_decodeBinary(&reply, &offset, &response);
24947 UA_ByteString_deleteMembers(&reply);
24967 "SecureChannel renewed");
24970 "SecureChannel opened");
24974 "SecureChannel could not be renewed " 24975 "with error code %s", UA_StatusCode_name(retval));
24978 "SecureChannel could not be opened " 24979 "with error code %s", UA_StatusCode_name(retval));
24983 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
24984 UA_OpenSecureChannelResponse_deleteMembers(&response);
24991 UA_ActivateSessionRequest_init(&request);
24999 UA_AnonymousIdentityToken_init(identityToken);
25006 UA_UserNameIdentityToken_init(identityToken);
25021 "ActivateSession failed with error code %s",
25026 UA_ActivateSessionRequest_deleteMembers(&request);
25027 UA_ActivateSessionResponse_deleteMembers(&response);
25033 GetEndpoints(
UA_Client *client,
size_t* endpointDescriptionsSize,
25036 UA_GetEndpointsRequest_init(&request);
25043 UA_GetEndpointsResponse_init(&response);
25050 "GetEndpointRequest failed with error code %s",
25051 UA_StatusCode_name(retval));
25052 UA_GetEndpointsResponse_deleteMembers(&response);
25055 *endpointDescriptions = response.
endpoints;
25059 UA_GetEndpointsResponse_deleteMembers(&response);
25064 EndpointsHandshake(
UA_Client *client) {
25066 size_t endpointArraySize = 0;
25067 UA_StatusCode retval = GetEndpoints(client, &endpointArraySize, &endpointArray);
25073 UA_String securityNone = UA_STRING(
"http://opcfoundation.org/UA/SecurityPolicy#None");
25074 UA_String binaryTransport = UA_STRING(
"http://opcfoundation.org/UA-Profile/" 25075 "Transport/uatcp-uasc-uabinary");
25078 for(
size_t i = 0; i < endpointArraySize; ++i) {
25090 endpointFound =
true;
25109 UA_UserTokenPolicy_copy(userToken, &client->
token);
25117 if(!endpointFound) {
25119 "No suitable endpoint found");
25121 }
else if(!tokenFound) {
25123 "No suitable UserTokenPolicy found for the possible endpoints");
25132 UA_CreateSessionRequest_init(&request);
25142 UA_CreateSessionResponse_init(&response);
25149 UA_CreateSessionRequest_deleteMembers(&request);
25150 UA_CreateSessionResponse_deleteMembers(&response);
25157 UA_CloseSessionRequest_init(&request);
25167 UA_CloseSessionRequest_deleteMembers(&request);
25168 UA_CloseSessionResponse_deleteMembers(&response);
25173 CloseSecureChannel(
UA_Client *client) {
25176 UA_CloseSecureChannelRequest_init(&request);
25201 UA_CloseSecureChannelRequest_deleteMembers(&request);
25205 size_t offset = 12;
25206 retval |= UA_SymmetricAlgorithmSecurityHeader_encodeBinary(&symHeader, &message, &offset);
25207 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &message, &offset);
25208 retval |= UA_NodeId_encodeBinary(&typeId, &message, &offset);
25214 retval |= UA_SecureConversationMessageHeader_encodeBinary(&msgHeader, &message, &offset);
25218 retval = conn->
send(conn, &message);
25223 UA_CloseSecureChannelRequest_deleteMembers(&request);
25229 size_t* endpointDescriptionsSize,
25231 if(client->
state == UA_CLIENTSTATE_CONNECTED)
25233 if(client->
state == UA_CLIENTSTATE_ERRORED)
25253 retval = HelAckHandshake(client);
25255 retval = SecureChannelHandshake(client,
false);
25257 retval = GetEndpoints(client, endpointDescriptionsSize, endpointDescriptions);
25268 const char *username,
const char *password){
25278 if(client->
state == UA_CLIENTSTATE_CONNECTED)
25280 if(client->
state == UA_CLIENTSTATE_ERRORED) {
25287 endpointUrl, client->
config.logger);
25300 retval = HelAckHandshake(client);
25302 retval = SecureChannelHandshake(client,
false);
25304 retval = EndpointsHandshake(client);
25306 retval = SessionHandshake(client);
25308 retval = ActivateSession(client);
25311 client->
state = UA_CLIENTSTATE_CONNECTED;
25323 if(client->
state == UA_CLIENTSTATE_READY)
25329 retval = CloseSession(client);
25332 retval |= CloseSecureChannel(client);
25337 UA_StatusCode retval = SecureChannelHandshake(client,
true);
25339 client->
state = UA_CLIENTSTATE_CONNECTED;
25371 "Server replied with an error message: %s %.*s",
25373 retval = msg->
error;
25377 "Server replied with the wrong message type");
25387 "Reply answers the wrong requestId. " 25388 "Async services are not yet implemented.");
25396 retval = UA_NodeId_decodeBinary(message, &offset, &responseId);
25406 "Reply answers the wrong request. Expected ns=%i,i=%i." 25410 UA_NodeId_deleteMembers(&responseId);
25427 "Error receiving the response");
25434 void *response,
const UA_DataType *responseType) {
25435 UA_init(response, responseType);
25442 client->
state = UA_CLIENTSTATE_ERRORED;
25463 client->
state = UA_CLIENTSTATE_FAULTED;
25469 UA_init(response, responseType);
25479 if(now < maxDate) {
25496 UA_ByteString_deleteMembers(&reply);
25514 UA_ReadRequest_init(&request);
25516 UA_ReadValueId_init(&
id);
25533 UA_ReadResponse_deleteMembers(&response);
25547 UA_ReadResponse_deleteMembers(&response);
25555 UA_BrowseRequest_init(&bReq);
25579 UA_BrowseRequest_deleteMembers(&bReq);
25580 UA_BrowseResponse_deleteMembers(&bResp);
25596 UA_AddReferencesItem_init(&item);
25604 UA_AddReferencesRequest_init(&request);
25610 UA_AddReferencesResponse_deleteMembers(&response);
25614 UA_AddReferencesResponse_deleteMembers(&response);
25617 retval = response.
results[0];
25618 UA_AddReferencesResponse_deleteMembers(&response);
25628 UA_DeleteReferencesItem_init(&item);
25635 UA_DeleteReferencesRequest_init(&request);
25641 UA_DeleteReferencesResponse_deleteMembers(&response);
25645 UA_DeleteReferencesResponse_deleteMembers(&response);
25648 retval = response.
results[0];
25649 UA_DeleteReferencesResponse_deleteMembers(&response);
25657 UA_DeleteNodesItem_init(&item);
25661 UA_DeleteNodesRequest_init(&request);
25667 UA_DeleteNodesResponse_deleteMembers(&response);
25671 UA_DeleteNodesResponse_deleteMembers(&response);
25674 retval = response.
results[0];
25675 UA_DeleteNodesResponse_deleteMembers(&response);
25687 UA_AddNodesRequest_init(&request);
25689 UA_AddNodesItem_init(&item);
25704 UA_AddNodesResponse_deleteMembers(&response);
25708 UA_AddNodesResponse_deleteMembers(&response);
25716 UA_AddNodesResponse_deleteMembers(&response);
25724 #ifdef UA_ENABLE_METHODCALLS 25728 const UA_NodeId methodId,
size_t inputSize,
25729 const UA_Variant *input,
size_t *outputSize,
25733 UA_CallRequest_init(&request);
25735 UA_CallMethodRequest_init(&item);
25753 UA_CallResponse_deleteMembers(&response);
25758 if(output !=
NULL && outputSize !=
NULL) {
25764 UA_CallResponse_deleteMembers(&response);
25782 UA_WriteValue_init(&wValue);
25783 wValue.
nodeId = *nodeId;
25792 UA_WriteRequest_init(&wReq);
25806 UA_WriteResponse_deleteMembers(&wResp);
25813 size_t newArrayDimensionsSize) {
25814 if(!newArrayDimensions)
25818 UA_WriteValue_init(&wValue);
25825 UA_WriteRequest_init(&wReq);
25838 UA_WriteResponse_deleteMembers(&wResp);
25851 UA_ReadValueId_init(&item);
25855 UA_ReadRequest_init(&request);
25867 UA_ReadResponse_deleteMembers(&response);
25880 UA_ReadResponse_deleteMembers(&response);
25887 UA_Variant_init(&res->
value);
25890 }
else if(UA_Variant_isScalar(&res->
value) &&
25899 UA_ReadResponse_deleteMembers(&response);
25906 size_t *outArrayDimensionsSize) {
25908 UA_ReadValueId_init(&item);
25912 UA_ReadRequest_init(&request);
25929 else if(!res->
hasValue || UA_Variant_isScalar(&res->
value))
25934 if(UA_Variant_isScalar(&res->
value) ||
25947 UA_ReadResponse_deleteMembers(&response);
25959 #ifdef UA_ENABLE_SUBSCRIPTIONS 25962 UA_Client_Subscriptions_new(
UA_Client *client, UA_SubscriptionSettings settings,
25965 UA_CreateSubscriptionRequest_init(&request);
25971 request.
priority = settings.priority;
25978 UA_Client_Subscription *newSub =
UA_malloc(
sizeof(UA_Client_Subscription));
25990 newSub->priority = request.
priority;
25993 if(newSubscriptionId)
25994 *newSubscriptionId = newSub->subscriptionID;
25997 UA_CreateSubscriptionResponse_deleteMembers(&response);
26004 UA_Client_Subscription *sub;
26005 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26006 if(sub->subscriptionID == subscriptionId)
26013 UA_Client_MonitoredItem *mon, *tmpmon;
26016 UA_Client_Subscriptions_removeMonitoredItem(client, sub->subscriptionID,
26017 mon->monitoredItemId);
26024 UA_DeleteSubscriptionsRequest_init(&request);
26030 retval = response.
results[0];
26031 UA_DeleteSubscriptionsResponse_deleteMembers(&response);
26035 "Could not remove subscription %u with error code %s",
26036 sub->subscriptionID, UA_StatusCode_name(retval));
26040 UA_Client_Subscriptions_forceDelete(client, sub);
26045 UA_Client_Subscriptions_forceDelete(
UA_Client *client,
26046 UA_Client_Subscription *sub) {
26047 UA_Client_MonitoredItem *mon, *mon_tmp;
26049 UA_NodeId_deleteMembers(&mon->monitoredNodeId);
26058 UA_Client_Subscriptions_addMonitoredItem(
UA_Client *client,
UA_UInt32 subscriptionId,
26060 UA_MonitoredItemHandlingFunction hf,
26061 void *hfContext,
UA_UInt32 *newMonitoredItemId) {
26062 UA_Client_Subscription *sub;
26063 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26064 if(sub->subscriptionID == subscriptionId)
26071 UA_Client_MonitoredItem *newMon =
UA_malloc(
sizeof(UA_Client_MonitoredItem));
26077 UA_CreateMonitoredItemsRequest_init(&request);
26080 UA_MonitoredItemCreateRequest_init(&item);
26102 UA_CreateMonitoredItemsResponse_deleteMembers(&response);
26108 UA_NodeId_copy(&nodeId, &newMon->monitoredNodeId);
26109 newMon->attributeID = attributeID;
26110 newMon->clientHandle = client->monitoredItemHandles;
26111 newMon->samplingInterval = sub->publishingInterval;
26112 newMon->queueSize = 1;
26113 newMon->discardOldest =
true;
26114 newMon->handler = hf;
26115 newMon->handlerContext = hfContext;
26118 *newMonitoredItemId = newMon->monitoredItemId;
26121 "Created a monitored item with client handle %u",
26122 client->monitoredItemHandles);
26124 UA_CreateMonitoredItemsResponse_deleteMembers(&response);
26129 UA_Client_Subscriptions_removeMonitoredItem(
UA_Client *client,
UA_UInt32 subscriptionId,
26131 UA_Client_Subscription *sub;
26132 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26133 if(sub->subscriptionID == subscriptionId)
26139 UA_Client_MonitoredItem *mon;
26141 if(mon->monitoredItemId == monitoredItemId)
26149 UA_DeleteMonitoredItemsRequest_init(&request);
26157 retval = response.
results[0];
26158 UA_DeleteMonitoredItemsResponse_deleteMembers(&response);
26162 "Could not remove monitoreditem %u with error code %s",
26163 monitoredItemId, UA_StatusCode_name(retval));
26168 UA_NodeId_deleteMembers(&mon->monitoredNodeId);
26180 UA_Client_Subscription *sub;
26181 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26189 "Processing a publish response on subscription %u with %u notifications",
26201 UA_Client_NotificationsAckNumber *ack;
26202 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry) {
26226 UA_Client_MonitoredItem *mon;
26229 mon->handler(mon->monitoredItemId, &mitemNot->
value, mon->handlerContext);
26235 "Could not process a notification with clienthandle %u on subscription %u",
26241 UA_Client_NotificationsAckNumber *tmpAck =
UA_malloc(
sizeof(UA_Client_NotificationsAckNumber));
26244 "Not enough memory to store the acknowledgement for a " 26245 "publish message on subscription %u", sub->subscriptionID);
26249 tmpAck->subAck.subscriptionId = sub->subscriptionID;
26254 UA_Client_Subscriptions_manuallySendPublishRequest(
UA_Client *client) {
26255 if (client->
state == UA_CLIENTSTATE_ERRORED)
26259 while(moreNotifications) {
26261 UA_PublishRequest_init(&request);
26264 UA_Client_NotificationsAckNumber *ack;
26265 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry)
26275 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry) {
26282 UA_Client_processPublishResponse(client, &request, &response);
26285 UA_PublishResponse_deleteMembers(&response);
26286 UA_PublishRequest_deleteMembers(&request);
26302 #define LEAPOCH (946684800LL + 86400*(31+29)) 26304 #define DAYS_PER_400Y (365*400 + 97) 26305 #define DAYS_PER_100Y (365*100 + 24) 26306 #define DAYS_PER_4Y (365*4 + 1) 26310 long long days, secs, years;
26311 int remdays, remsecs, remyears;
26312 int qc_cycles, c_cycles, q_cycles;
26314 int wday, yday, leap;
26315 static const char days_in_month[] = {31,30,31,30,31,31,30,31,30,31,31,29};
26318 if (t < INT_MIN * 31622400LL || t > INT_MAX * 31622400LL)
26322 days = secs / 86400LL;
26323 remsecs = (int)(secs % 86400);
26329 wday = (int)((3+days)%7);
26330 if (wday < 0) wday += 7;
26340 if (c_cycles == 4) --c_cycles;
26344 if (q_cycles == 25) --q_cycles;
26347 remyears = remdays / 365;
26348 if (remyears == 4) --remyears;
26349 remdays -= remyears * 365;
26351 leap = !remyears && (q_cycles || !c_cycles);
26352 yday = remdays + 31 + 28 + leap;
26353 if (yday >= 365+leap) yday -= 365+leap;
26355 years = remyears + 4*q_cycles + 100*c_cycles + 400LL*qc_cycles;
26357 for (months=0; days_in_month[months] <= remdays; ++months)
26358 remdays -= days_in_month[months];
26360 if (years+100 > INT_MAX || years+100 < INT_MIN)
26363 tm->tm_year = (int)(years + 100);
26364 tm->tm_mon = months + 2;
26365 if (tm->tm_mon >= 12) {
26369 tm->tm_mday = remdays + 1;
26370 tm->tm_wday = wday;
26371 tm->tm_yday = yday;
26373 tm->tm_hour = remsecs / 3600;
26374 tm->tm_min = remsecs / 60 % 60;
26375 tm->tm_sec = remsecs % 60;
26408 rng->
inc = (initseq << 1u) | 1u;
26410 rng->
state += initial_state;
26415 uint64_t oldstate = rng->
state;
26416 rng->
state = oldstate * 6364136223846793005ULL + rng->
inc;
26417 uint32_t xorshifted = (uint32_t)(((oldstate >> 18u) ^ oldstate) >> 27u);
26418 uint32_t rot = (uint32_t)(oldstate >> 59u);
26419 return (xorshifted >> rot) | (xorshifted << ((~rot + 1u) & 31));
26430 #ifndef UA_ENABLE_STATUSCODE_DESCRIPTIONS 26431 static const size_t statusCodeDescriptionsSize = 1;
26433 {0xffffffff,
"StatusCode descriptions not available",
"open62541 was compiled without support for statuscode descriptions"}
26436 static const size_t statusCodeDescriptionsSize = 229;
26456 {
UA_STATUSCODE_BADNOTHINGTODO,
"BadNothingToDo",
"There was nothing to do because the client passed a list of operations with no elements."},
26505 {
UA_STATUSCODE_BADNOTFOUND,
"BadNotFound",
"A requested item was not found or a search operation ended without success."},
26537 {
UA_STATUSCODE_BADNOVALIDCERTIFICATES,
"BadNoValidCertificates",
"The client did not provide at least one software certificate that is valid and meets the profile requirements for the server."},
26542 {
UA_STATUSCODE_BADNODEIDREJECTED,
"BadNodeIdRejected",
"The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client."},
26562 {
UA_STATUSCODE_GOODRESULTSMAYBEINCOMPLETE,
"GoodResultsMayBeIncomplete",
"The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete."},
26574 {
UA_STATUSCODE_BADTYPEMISMATCH,
"BadTypeMismatch",
"The value supplied for the attribute is not of the same type as the attribute's value."},
26599 {
UA_STATUSCODE_BADDEVICEFAILURE,
"BadDeviceFailure",
"There has been a failure in the device/data source that generates the value that has affected the value."},
26600 {
UA_STATUSCODE_BADSENSORFAILURE,
"BadSensorFailure",
"There has been a failure in the sensor from which the value is derived by the device/data source."},
26609 {
UA_STATUSCODE_UNCERTAINSUBNORMAL,
"UncertainSubNormal",
"The value is derived from multiple sources and has less than the required number of Good sources."},
26631 {
UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED,
"BadTimestampNotSupported",
"The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp)."},
26636 {
UA_STATUSCODE_GOODMOREDATA,
"GoodMoreData",
"The data or event field was successfully replaced in the historical database."},
26641 {
UA_STATUSCODE_GOODDATAIGNORED,
"GoodDataIgnored",
"The request pecifies fields which are not valid for the EventType or cannot be saved by the historian."},
26643 {
UA_STATUSCODE_GOODEDITED,
"GoodEdited",
"The value does not come from the real source and has been edited by the server."},
26647 {
UA_STATUSCODE_BADDOMINANTVALUECHANGED,
"BadDominantValueChanged",
"The related EngineeringUnit has been changed but this change has not been applied to the device. The Variable Value is still dependent on the previous unit but its status is currently Bad."},
26648 {
UA_STATUSCODE_UNCERTAINDEPENDENTVALUECHANGED,
"UncertainDependentValueChanged",
"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is uncertain."},
26649 {
UA_STATUSCODE_BADDEPENDENTVALUECHANGED,
"BadDependentValueChanged",
"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is Bad."},
26667 {0xffffffff,
"Unknown",
"Unknown StatusCode"},
26673 for(
size_t i = 0; i < statusCodeDescriptionsSize; ++i) {
26674 if(statusCodeDescriptions[i].code == code)
26675 return &statusCodeDescriptions[i];
26677 return &statusCodeDescriptions[statusCodeDescriptionsSize-1];
26686 #if defined(__MINGW32__) && (!defined(WINVER) || WINVER < 0x501) 26689 # undef _WIN32_WINDOWS 26690 # undef _WIN32_WINNT 26691 # define WINVER 0x0501 26692 # define _WIN32_WINDOWS 0x0501 26693 # define _WIN32_WINNT 0x0501 26697 #include <stdlib.h> 26699 #include <string.h> 26703 # include <malloc.h> 26706 # ifdef SLIST_ENTRY 26707 # undef SLIST_ENTRY 26710 # define _WINSOCK_DEPRECATED_NO_WARNINGS 26711 # include <winsock2.h> 26712 # include <ws2tcpip.h> 26713 # define CLOSESOCKET(S) closesocket((SOCKET)S) 26714 # define ssize_t int 26715 # define WIN32_INT (int) 26717 # define CLOSESOCKET(S) close(S) 26718 # define SOCKET int 26720 # include <arpa/inet.h> 26721 # include <netinet/in.h> 26722 # include <sys/select.h> 26723 # include <sys/ioctl.h> 26724 # include <fcntl.h> 26725 # include <unistd.h> 26726 # include <netdb.h> 26728 # include <sys/socket.h> 26730 #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) 26731 # include <sys/param.h> 26733 # include<sys/socket.h> 26736 # ifndef __CYGWIN__ 26737 # include <netinet/tcp.h> 26743 #if defined(_WIN32) || defined(__OpenBSD__) || \ 26744 (defined(__GNU_LIBRARY__) && (__GNU_LIBRARY__ <= 6) && \ 26745 (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 16) || \ 26746 !defined(__GNU_LIBRARY__)) 26747 # define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds) 26748 # define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds) 26750 # define UA_fd_set(fd, fds) FD_SET(fd, fds) 26751 # define UA_fd_isset(fd, fds) FD_ISSET(fd, fds) 26754 #ifdef UA_ENABLE_MULTITHREADING 26755 # include <urcu/uatomic.h> 26759 #define errno__ WSAGetLastError() 26760 # define INTERRUPTED WSAEINTR 26761 # define WOULDBLOCK WSAEWOULDBLOCK 26762 # define AGAIN WSAEWOULDBLOCK 26764 # define errno__ errno 26765 # define INTERRUPTED EINTR 26766 # define WOULDBLOCK EWOULDBLOCK 26767 # define AGAIN EAGAIN 26783 size_t nWritten = 0;
26785 #ifdef MSG_NOSIGNAL 26786 flags = MSG_NOSIGNAL;
26793 size_t bytes_to_send = buf->
length - nWritten;
26797 connection->
close(connection);
26798 socket_close(connection);
26799 UA_ByteString_deleteMembers(buf);
26803 nWritten += (size_t)n;
26804 }
while(nWritten < buf->length);
26805 UA_ByteString_deleteMembers(buf);
26812 if(!response->
data) {
26820 UA_UInt32 timeout_usec = timeout * 1000;
26822 struct timeval tmptv = {(
long int)(timeout_usec / 1000000), timeout_usec % 1000000};
26824 struct timeval tmptv = {(
long int)(timeout_usec / 1000000), (
long int)(timeout_usec % 1000000)};
26826 int ret = setsockopt(connection->
sockfd, SOL_SOCKET, SO_RCVTIMEO,
26827 (
const char *)&tmptv,
sizeof(
struct timeval));
26829 DWORD timeout_dw = timeout;
26830 int ret = setsockopt(connection->
sockfd, SOL_SOCKET, SO_RCVTIMEO,
26831 (
const char*)&timeout_dw,
sizeof(DWORD));
26834 UA_ByteString_deleteMembers(response);
26835 socket_close(connection);
26847 UA_UInt32 timeout_usec = timeout * 1000;
26848 struct timeval tmptv = {(
long int)(timeout_usec / 1000000),
26849 (
long int)(timeout_usec % 1000000)};
26850 int retval = select(connection->
sockfd+1, &fdset,
NULL,
NULL, &tmptv);
26852 ret = recv(connection->
sockfd, (
char*)response->
data,
26858 ret = recv(connection->
sockfd, (
char*)response->
data,
26862 ssize_t ret = recv(connection->
sockfd, (
char*)response->
data,
26868 UA_ByteString_deleteMembers(response);
26869 socket_close(connection);
26875 UA_ByteString_deleteMembers(response);
26879 socket_close(connection);
26884 response->
length = (size_t)ret;
26891 if(ioctlsocket(sockfd, FIONBIO, &iMode) != NO_ERROR)
26894 int opts = fcntl(sockfd, F_GETFL);
26895 if(opts < 0 || fcntl(sockfd, F_SETFL, opts|O_NONBLOCK) < 0)
26901 static void FreeConnectionCallback(UA_Server *server,
void *ptr) {
26943 #define MAXBACKLOG 100 26968 UA_ByteString_deleteMembers(buf);
26973 UA_ByteString_deleteMembers(buf);
26992 ServerNetworkLayerTCP_closeConnection(
UA_Connection *connection) {
26993 #ifdef UA_ENABLE_MULTITHREADING 27001 #if UA_LOGLEVEL <= 300 27005 "Connection %i | Force closing the connection",
27010 shutdown(connection->
sockfd, 2);
27020 struct sockaddr_in addr;
27021 socklen_t addrlen =
sizeof(
struct sockaddr_in);
27022 int res = getpeername(newsockfd, (
struct sockaddr*)&addr, &addrlen);
27026 "Connection %i | New connection over TCP from %s:%d",
27027 newsockfd, inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
27030 "Connection %i | New connection over TCP, " 27031 "getpeername failed with errno %i", newsockfd, errno);
27039 c->
send = socket_write;
27040 c->
close = ServerNetworkLayerTCP_closeConnection;
27050 "No memory for a new Connection");
27068 char hostname[256];
27069 if(gethostname(hostname, 255) == 0) {
27070 char discoveryUrl[256];
27072 du.
length = (size_t)snprintf(discoveryUrl, 255,
"opc.tcp://%s:%d",
27073 hostname, layer->
port);
27075 du.
length = (size_t)_snprintf_s(discoveryUrl, 255, _TRUNCATE,
27076 "opc.tcp://%s:%d", hostname, layer->
port);
27083 SOCKET newsock = socket(PF_INET, SOCK_STREAM, 0);
27085 if(newsock == INVALID_SOCKET)
27091 "Error opening the server socket");
27097 if(setsockopt(newsock, SOL_SOCKET, SO_REUSEADDR,
27098 (
const char *)&optval,
sizeof(optval)) == -1 ||
27101 "Error during setting of server socket options");
27107 const struct sockaddr_in serv_addr = {
27108 .sin_family = AF_INET, .sin_addr.s_addr = INADDR_ANY,
27109 .sin_port = htons(layer->
port), .sin_zero = {0}};
27110 if(bind(newsock, (
const struct sockaddr *)&serv_addr,
sizeof(serv_addr)) < 0) {
27112 "Error during binding of the server socket");
27120 "Error listening on server socket");
27127 "TCP network layer listening on %.*s",
27141 js[c].
type = UA_JOBTYPE_DETACHCONNECTION;
27146 js[c].
type = UA_JOBTYPE_METHODCALL_DELAYED;
27164 size_t totalJobs = removeClosedConnections(layer, js);
27167 fd_set fdset, errset;
27168 UA_Int32 highestfd = setFDSet(layer, &fdset);
27169 setFDSet(layer, &errset);
27170 struct timeval tmptv = {0, timeout * 1000};
27171 UA_Int32 resultsize = select(highestfd+1, &fdset,
NULL, &errset, &tmptv);
27172 if(totalJobs == 0 && resultsize <= 0) {
27183 if(newsockfd != INVALID_SOCKET)
27188 socket_set_nonblocking(newsockfd);
27191 setsockopt(newsockfd, IPPROTO_TCP, TCP_NODELAY, (
void *)&i,
sizeof(i));
27192 ServerNetworkLayerTCP_add(layer, (
UA_Int32)newsockfd);
27199 for(
size_t i = 0; i < layer->
mappingsSize && j < (size_t)resultsize; ++i) {
27208 js[totalJobs + j].
type = UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER;
27213 "Connection %i | Connection closed from remote", c->
sockfd);
27215 js[totalJobs + j].
type = UA_JOBTYPE_DETACHCONNECTION;
27220 js[totalJobs + j].
type = UA_JOBTYPE_METHODCALL_DELAYED;
27221 js[totalJobs + j].
job.
methodCall.method = FreeConnectionCallback;
27228 if(totalJobs == 0) {
27240 "Shutting down the TCP network layer with %d open connection(s)",
27249 items[i*2].
type = UA_JOBTYPE_DETACHCONNECTION;
27251 items[(i*2)+1].type = UA_JOBTYPE_METHODCALL_DELAYED;
27252 items[(i*2)+1].job.
methodCall.method = FreeConnectionCallback;
27273 WORD wVersionRequested;
27275 wVersionRequested = MAKEWORD(2, 2);
27276 WSAStartup(wVersionRequested, &wsaData);
27285 layer->
conf = conf;
27286 layer->
port = port;
27289 nl.
start = ServerNetworkLayerTCP_start;
27290 nl.
getJobs = ServerNetworkLayerTCP_getJobs;
27291 nl.
stop = ServerNetworkLayerTCP_stop;
27301 ClientNetworkLayerGetBuffer(
UA_Connection *connection,
size_t length,
27312 UA_ByteString_deleteMembers(buf);
27317 #ifdef UA_ENABLE_MULTITHREADING 27325 socket_close(connection);
27333 WORD wVersionRequested;
27335 wVersionRequested = MAKEWORD(2, 2);
27336 WSAStartup(wVersionRequested, &wsaData);
27344 connection.
send = socket_write;
27345 connection.
recv = socket_recv;
27346 connection.
close = ClientNetworkLayerClose;
27351 char hostname[512];
27353 const char *path =
NULL;
27359 "Server url is invalid: %s", endpointUrl);
27362 "Server url does not begin with 'opc.tcp://' '%s'",
27370 "No port defined, using standard port %d", port);
27373 struct addrinfo hints, *server;
27374 memset(&hints, 0,
sizeof(hints));
27375 hints.ai_socktype = SOCK_STREAM;
27376 hints.ai_family = AF_INET;
27379 snprintf(portStr, 6,
"%d", port);
27381 _snprintf_s(portStr, 6, _TRUNCATE,
"%d", port);
27383 int error = getaddrinfo(hostname, portStr, &hints, &server);
27384 if(error != 0 || !server) {
27386 "DNS lookup of %s failed with error %s",
27387 hostname, gai_strerror(error));
27392 SOCKET clientsockfd = socket(server->ai_family, server->ai_socktype,
27393 server->ai_protocol);
27395 if(clientsockfd == INVALID_SOCKET) {
27397 if(clientsockfd < 0) {
27400 "Could not create client socket");
27401 freeaddrinfo(server);
27407 error = connect(clientsockfd, server->ai_addr,
WIN32_INT server->ai_addrlen);
27408 freeaddrinfo(server);
27410 ClientNetworkLayerClose(&connection);
27413 FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
27414 FORMAT_MESSAGE_FROM_SYSTEM |
27415 FORMAT_MESSAGE_IGNORE_INSERTS,
27416 NULL, WSAGetLastError(),
27417 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
27418 (LPWSTR)&s, 0,
NULL);
27420 "Connection to %s failed. Error: %d: %S",
27421 endpointUrl, WSAGetLastError(), s);
27425 "Connection to %s failed. Error: %d: %s",
27426 endpointUrl, errno, strerror(errno));
27431 #ifdef SO_NOSIGPIPE 27433 int sso_result = setsockopt(connection.
sockfd,
27434 SOL_SOCKET, SO_NOSIGPIPE,
27435 (
void*)&val,
sizeof(val));
27438 "Couldn't set SO_NOSIGPIPE");
27452 # ifdef SLIST_ENTRY 27453 # undef SLIST_ENTRY 27455 # include <windows.h> 27457 # include <sys/time.h> 27460 #if defined(__APPLE__) || defined(__MACH__) 27461 # include <mach/clock.h> 27462 # include <mach/mach.h> 27466 #if defined(_WIN32) 27470 GetSystemTime(&st);
27471 SystemTimeToFileTime(&st, &ft);
27473 ul.LowPart = ft.dwLowDateTime;
27474 ul.HighPart = ft.dwHighDateTime;
27478 gettimeofday(&tv,
NULL);
27484 #if defined(_WIN32) 27485 LARGE_INTEGER freq, ticks;
27486 QueryPerformanceFrequency(&freq);
27487 QueryPerformanceCounter(&ticks);
27490 #elif defined(__APPLE__) || defined(__MACH__) 27492 clock_serv_t cclock;
27493 mach_timespec_t mts;
27494 host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock);
27495 clock_get_time(cclock, &mts);
27496 mach_port_deallocate(mach_task_self(), cclock);
27498 #elif !defined(CLOCK_MONOTONIC_RAW) 27499 struct timespec ts;
27500 clock_gettime(CLOCK_MONOTONIC, &ts);
27503 struct timespec ts;
27504 clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
27515 #include <stdarg.h> 27517 #ifdef UA_ENABLE_MULTITHREADING 27518 #include <pthread.h> 27519 static pthread_mutex_t printf_mutex = PTHREAD_MUTEX_INITIALIZER;
27522 const char *
LogLevelNames[6] = {
"trace",
"debug",
"info",
"warning",
"error",
"fatal"};
27523 const char *
LogCategoryNames[6] = {
"network",
"channel",
"session",
"server",
"client",
"userland"};
27525 #if (defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6) || \ 27527 # pragma GCC diagnostic push 27528 # pragma GCC diagnostic ignored "-Wformat-nonliteral" 27533 const char *msg, va_list args) {
27535 #ifdef UA_ENABLE_MULTITHREADING 27536 pthread_mutex_lock(&printf_mutex);
27538 printf(
"[%.23s] %s/%s\t", t.
data, LogLevelNames[level], LogCategoryNames[category]);
27539 vprintf(msg, args);
27542 #ifdef UA_ENABLE_MULTITHREADING 27543 pthread_mutex_unlock(&printf_mutex);
27545 UA_ByteString_deleteMembers(&t);
27548 #if (defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6) || \ 27550 # pragma GCC diagnostic pop 27565 .sendBufferSize = 65535,
27566 .recvBufferSize = 65535,
27567 .maxMessageSize = 0,
27575 #define MANUFACTURER_NAME "open62541" 27576 #define PRODUCT_NAME "open62541 OPC UA Server" 27577 #define PRODUCT_URI "http://open62541.org" 27578 #define APPLICATION_NAME "open62541-based OPC UA Application" 27579 #define APPLICATION_URI "urn:unconfigured:application" 27581 #define UA_STRING_STATIC(s) {sizeof(s)-1, (UA_Byte*)s} 27582 #define UA_STRING_STATIC_NULL {0, NULL} 27584 #define STRINGIFY(arg) #arg 27585 #define VERSION(MAJOR, MINOR, PATCH, LABEL) \ 27586 STRINGIFY(MAJOR) "." STRINGIFY(MINOR) "." STRINGIFY(PATCH) LABEL 27607 .applicationDescription = {
27615 .discoveryUrlsSize = 0,
27616 .discoveryUrls =
NULL },
27620 .networkLayersSize = 0,
27621 .networkLayers =
NULL,
27624 .enableAnonymousLogin =
true,
27625 .enableUsernamePasswordLogin =
true,
27627 .usernamePasswordLoginsSize = 2,
27630 .maxSecureChannels = 40,
27631 .maxSecurityTokenLifetime = 10 * 60 * 1000,
27634 .maxSessions = 100,
27635 .maxSessionTimeout = 60.0 * 60.0 * 1000.0,
27638 .publishingIntervalLimits = { .min = 100.0, .max = 3600.0 * 1000.0 },
27639 .lifeTimeCountLimits = { .max = 15000, .min = 3 },
27640 .keepAliveCountLimits = { .max = 100, .min = 1 },
27641 .maxNotificationsPerPublish = 1000,
27642 .maxRetransmissionQueueSize = 0,
27645 .samplingIntervalLimits = { .min = 50.0, .max = 24.0 * 3600.0 * 1000.0 },
27646 .queueSizeLimits = { .max = 100, .min = 1 }
27655 .secureChannelLifeTime = 10 * 60 * 1000,
27657 .localConnectionConfig = {
27658 .protocolVersion = 0,
27659 .sendBufferSize = 65535,
27660 .recvBufferSize = 65535,
27661 .maxMessageSize = 0,
27670 #ifdef UA_ENABLE_SUBSCRIPTIONS 27672 const UA_SubscriptionSettings UA_SubscriptionSettings_standard = {
27673 .requestedPublishingInterval = 500.0,
27674 .requestedLifetimeCount = 10000,
27675 .requestedMaxKeepAliveCount = 1,
27676 .maxNotificationsPerPublish = 10,
27677 .publishingEnabled =
true,
UA_EndpointDescription * serverEndpoints
UA_SecureChannel * channel
#define UA_NS0ID_BROWSENEXTREQUEST_ENCODING_DEFAULTBINARY
#define LIST_HEAD(name, type)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXQUERYCONTINUATIONPOINTS
#define UA_NS0ID_UNREGISTERNODESREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode UA_Server_addReference(UA_Server *server, const UA_NodeId sourceId, const UA_NodeId refTypeId, const UA_ExpandedNodeId targetId, UA_Boolean isForward)
void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *session, const UA_TranslateBrowsePathsToNodeIdsRequest *request, UA_TranslateBrowsePathsToNodeIdsResponse *response)
UA_StatusCode UA_Client_connect_username(UA_Client *client, const char *endpointUrl, const char *username, const char *password)
size_t subscriptionIdsSize
UA_ResponseHeader responseHeader
UA_NodeId authenticationToken
#define UA_NS0ID_SERVERTYPE
#define UA_STATUSCODE_BADSHELVINGTIMEOUTOFRANGE
UA_TimestampsToReturn timestampsToReturn
#define UA_NS0ID_MODIFYMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode(* recv)(UA_Connection *connection, UA_ByteString *response, UA_UInt32 timeout)
size_t continuationPointsSize
#define UA_TYPES_SETMONITORINGMODERESPONSE
UA_VariantStorageType storageType
UA_SecureChannelManager secureChannelManager
void UA_Variant_setScalar(UA_Variant *v, void *UA_RESTRICT p, const UA_DataType *type)
#define UA_STATUSCODE_BADDEADBANDFILTERINVALID
#define UA_STATUSCODE_UNCERTAININITIALVALUE
#define UA_EXPORT
Function Export On Win32: Define UA_DYNAMIC_LINKING and UA_DYNAMIC_LINKING_EXPORT in order to export ...
#define UA_NodeStore_newVariableTypeNode()
#define UA_STATUSCODE_BADVIEWPARAMETERMISMATCH
#define UA_NS0ID_ENUMERATION
struct UA_ExtensionObject::@1::@2 encoded
uint32_t UA_UInt32
UInt32 ^^^^^^ An integer value between 0 and 4 294 967 295.
#define UA_TYPES_METHODATTRIBUTES
#define UA_BINARY_OVERLAYABLE_INTEGER
String Manipulation The header string.h is defined in the C-standard.
#define UA_STATUSCODE_BADDEVICEFAILURE
#define UA_NS0ID_FROMSTATE
void UA_SecureChannel_revolveTokens(UA_SecureChannel *channel)
#define UA_NS0ID_SERVERSTATUSDATATYPE
#define UA_TYPES_SIGNATUREDATA
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADINSUFFICIENTCLIENTPROFILE
UA_QualifiedName targetName
#define UA_STATUSCODE_BADEVENTFILTERINVALID
#define UA_NS0ID_BUILDINFO
#define container_of(ptr, type, member)
UA_StatusCode UA_Server_forEachChildNodeCall(UA_Server *server, UA_NodeId parentNodeId, UA_NodeIteratorCallback callback, void *handle)
ApplicationDescription ^^^^^^^^^^^^^^^^^^^^^^ Describes an application and how to find it...
#define UA_NS0ID_SERVER_VENDORSERVERINFO
void Service_DeleteNodes(UA_Server *server, UA_Session *session, const UA_DeleteNodesRequest *request, UA_DeleteNodesResponse *response)
UA_NodeId referenceTypeId
UA_BrowsePathResult UA_Server_translateBrowsePathToNodeIds(UA_Server *server, const UA_BrowsePath *browsePath)
#define UA_NS0ID_FINDSERVERSREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_QUERYDATASET
#define UA_OPEN62541_VER_LABEL
#define UA_STATUSCODE_BADSERVERNOTCONNECTED
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_MANUFACTURERNAME
#define UA_NS0ID_ORGANIZES
#define UA_STATUSCODE_UNCERTAINDATASUBNORMAL
UA_ApplicationType
ApplicationType ^^^^^^^^^^^^^^^ The types of applications.
const UA_EXPORT UA_ConnectionConfig UA_ConnectionConfig_standard
UA_StatusCode UA_NodeStore_remove(UA_NodeStore *ns, const UA_NodeId *nodeid)
UA_MonitoredItemNotification * monitoredItems
#define UA_STATUSCODE_GOODDATAIGNORED
#define UA_STATUSCODE_BADENCODINGERROR
#define UA_TYPES_DELETEMONITOREDITEMSREQUEST
#define UA_TYPES_SETPUBLISHINGMODEREQUEST
void UA_Subscription_publishCallback(UA_Server *server, UA_Subscription *sub)
#define UA_TYPES_MODIFYMONITOREDITEMSREQUEST
#define UA_STATUSCODE_BADCERTIFICATEINVALID
UA_ByteString incompleteMessage
#define UA_TYPES_DELETEREFERENCESITEM
void(* UA_Service)(UA_Server *, UA_Session *, const void *request, void *response)
UA_StatusCode innerStatusCode
UA_NodeStore * UA_NodeStore_new(void)
Nodestore Lifecycle ^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_SIGNEDSOFTWARECERTIFICATE
#define LIST_NEXT(elm, field)
UA_AddNodesItem * nodesToAdd
UA_MonitoredItem * UA_MonitoredItem_new(void)
UA_Boolean UA_Guid_equal(const UA_Guid *g1, const UA_Guid *g2)
AddReferencesItem ^^^^^^^^^^^^^^^^^ A request to add a reference to the server address space...
UA_StatusCode UA_SecureChannelManager_close(UA_SecureChannelManager *cm, UA_UInt32 channelId)
#define UA_TYPES_READVALUEID
#define UA_TYPES_BROWSEPATH
UA_Boolean containsNoLoops
UA_ByteString serverCertificate
void UA_Client_reset(UA_Client *client)
#define UA_NS0ID_REFERENCETYPESFOLDER
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
RelativePath ^^^^^^^^^^^^ A relative path constructed from reference types and browse names...
TranslateBrowsePathsToNodeIdsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Translates one or more path...
UA_QualifiedName browseName
#define UA_STATUSCODE_BADCONDITIONALREADYDISABLED
struct UA_NodeStoreEntry * orig
UA_DeleteNodesItem * nodesToDelete
#define UA_STATUSCODE_BADDUPLICATEREFERENCENOTALLOWED
#define UA_STATUSCODE_UNCERTAINREFERENCENOTDELETED
UA_String UA_ByteString
ByteString ^^^^^^^^^^ A sequence of octets.
#define UA_STATUSCODE_BADINDEXRANGEINVALID
#define UA_NS0ID_QUALIFIEDNAME
UA_StatusCode UA_Client_manuallyRenewSecureChannel(UA_Client *client)
UA_UInt32 * subscriptionIds
UA_StatusCode Subscription_unregisterPublishJob(UA_Server *server, UA_Subscription *sub)
#define UA_STATUSCODE_BADCERTIFICATEUNTRUSTED
void(* UA_deleteMembersSignature)(void *p, const UA_DataType *type)
CreateSessionRequest ^^^^^^^^^^^^^^^^^^^^ Creates a new session with the server.
UA_String securityPolicyUri
void UA_Server_deleteAllRepeatedJobs(UA_Server *server)
#define UA_NS0ID_OBJECTSFOLDER
#define MAXBACKLOG
For the multithreaded mode, assume a single thread that periodically "gets work" from the network lay...
struct UA_ExtensionObject::@1::@3 decoded
#define UA_STATUSCODE_BADCONTINUATIONPOINTINVALID
QueryFirstRequest ^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_SOFTWAREVERSION
UA_StatusCode UA_Server_editNode(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId, UA_EditNodeCallback callback, const void *data)
#define UA_TYPES_GUID
Guid ^^^^.
#define UA_STATUSCODE_BADCONDITIONDISABLED
FindServersRequest ^^^^^^^^^^^^^^^^^^ Finds the servers known to the discovery server.
#define UA_NS0ID_TRANSLATEBROWSEPATHSTONODEIDSREQUEST_ENCODING_DEFAULTBINARY
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADOUTOFSERVICE
#define TAILQ_REMOVE(head, elm, field)
AddNodesItem ^^^^^^^^^^^^ A request to add a node to the server address space.
#define UA_STATUSCODE_BADCONNECTIONREJECTED
struct ServerNetworkLayerTCP::ConnectionMapping * mappings
UA_ExtensionObjectEncoding encoding
UA_ByteString continuationPoint
void UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connection, const UA_ByteString *message)
#define UA_NodeStore_newObjectTypeNode()
#define CHECK_NODECLASS(CLASS)
CreateMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
struct UA_Job::@5::@6 binaryMessage
#define TAILQ_FOREACH(var, head, field)
UA_StatusCode UA_Client_NamespaceGetIndex(UA_Client *client, UA_String *namespaceUri, UA_UInt16 *namespaceIndex)
#define CHECK_DATATYPE_ARRAY(EXP_DT)
ServiceFault ^^^^^^^^^^^^ The response returned by all services when there is a service level error...
#define UA_NS0ID_CREATESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_TRANSPORT_TCPACKNOWLEDGEMESSAGE
#define UA_STATUSCODE_BADDISCONNECT
#define UA_NS0ID_VARIABLETYPESFOLDER
UA_StatusCode UA_SecureChannel_processChunks(UA_SecureChannel *channel, const UA_ByteString *chunks, UA_ProcessMessageCallback callback, void *application)
#define UA_TYPES_WRITEREQUEST
UA_CallMethodResult UA_EXPORT UA_Server_call(UA_Server *server, const UA_CallMethodRequest *request)
Method Call
#define UA_STATUSCODE_BADINTERNALERROR
UA_MonitoringMode
MonitoringMode ^^^^^^^^^^^^^^.
CreateSubscriptionRequest ^^^^^^^^^^^^^^^^^^^^^^^^^.
struct UA_MonitoredItem UA_MonitoredItem
UA_ChannelSecurityToken securityToken
#define UA_TYPES_ACTIVATESESSIONREQUEST
#define UA_TYPES_GETENDPOINTSREQUEST
bool UA_Boolean
Boolean ^^^^^^^ A two-state logical value (true or false).
#define UA_TYPES_DATAVALUE
DataValue ^^^^^^^^^.
void UA_Client_delete(UA_Client *client)
#define UA_NS0ID_BASEDATATYPE
#define UA_STATUSCODE_UNCERTAINREFERENCEOUTOFSERVER
DiagnosticInfo ^^^^^^^^^^^^^^ A structure that contains detailed error and diagnostic information ass...
#define UA_TYPES_INT16
Int16 ^^^^^.
#define SIMPLEQ_ENTRY(type)
#define UA_TRANSPORT_TCPHELLOMESSAGE
UA_DateTime UA_DateTime_now(void)
DataTypeAttributes ^^^^^^^^^^^^^^^^^^ The attributes for a data type node.
#define UA_INLINE
Inline Functions
UA_UInt32 revisedLifetime
TcpAcknowledgeMessage ^^^^^^^^^^^^^^^^^^^^^ Acknowledge Message.
UA_StatusCode UA_SessionManager_createSession(UA_SessionManager *sm, UA_SecureChannel *channel, const UA_CreateSessionRequest *request, UA_Session **session)
UA_StatusCode UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_VariableAttributes attr, const UA_DataSource dataSource, UA_NodeId *outNewNodeId)
UA_StatusCode UA_Client_connect(UA_Client *client, const char *endpointUrl)
UA_StatusCode UA_Client_disconnect(UA_Client *client)
const UA_ExpandedNodeId UA_EXPANDEDNODEID_NULL
#define UA_TYPES_PUBLISHREQUEST
struct MonitoredItem_queuedValue MonitoredItem_queuedValue
const UA_DataType * responseType
UA_RelativePathElement * elements
QueryNextRequest ^^^^^^^^^^^^^^^^.
UA_StatusCode UA_Client_forEachChildNodeCall(UA_Client *client, UA_NodeId parentNodeId, UA_NodeIteratorCallback callback, void *handle)
#define UA_STATUSCODE_BADNODEIDUNKNOWN
#define UA_TYPES_OPENSECURECHANNELREQUEST
#define UA_NS0ID_SERVER_SERVERSTATUS_STATE
#define UA_STATUSCODE_BADWOULDBLOCK
UA_StatusCode UA_NodeStore_insert(UA_NodeStore *ns, UA_Node *node)
Insert / Get / Replace / Remove ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_HASENCODING
#define UA_NS0ID_NONHIERARCHICALREFERENCES
SignatureData ^^^^^^^^^^^^^ A digital signature.
#define UA_TYPES_CLOSESECURECHANNELRESPONSE
DeleteSubscriptionsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADINDEXRANGENODATA
UA_Node * UA_NodeStore_getCopy(UA_NodeStore *ns, const UA_NodeId *nodeid)
UA_Double revisedSessionTimeout
#define UA_STATUSCODE_GOODENTRYREPLACED
size_t UA_readNumber(UA_Byte *buf, size_t buflen, UA_UInt32 *number)
size_t subscriptionIdsSize
UA_UserTokenType tokenType
#define UA_TYPES_WRITERESPONSE
#define UA_STATUSCODE_BADMONITOREDITEMFILTERINVALID
double UA_Double
Double ^^^^^^ An IEEE double precision (64 bit) floating point value.
MonitoredItemModifyResult ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_LOG_INFO_SESSION(LOGGER, SESSION, MSG,...)
#define SLIST_FOREACH_SAFE(var, head, field, tvar)
UA_MonitoredItemCreateResult * results
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADSTATENOTACTIVE
#define UA_STATUSCODE_BADTARGETNODEIDINVALID
#define SLIST_REMOVE(head, elm, type, field)
#define UA_TYPES_MODIFYSUBSCRIPTIONRESPONSE
#define UA_STATUSCODE_BADDIALOGNOTACTIVE
#define UA_NS0ID_HASMODELLINGRULE
UA_StatusCode __UA_Server_read(UA_Server *server, const UA_NodeId *nodeId, const UA_AttributeId attributeId, void *v)
#define UA_NS0ID_SERVER_AUDITING
#define UA_STATUSCODE_BADBROWSENAMEDUPLICATED
#define UA_TYPES_SUBSCRIPTIONACKNOWLEDGEMENT
ReferenceDescription ^^^^^^^^^^^^^^^^^^^^ The description of a reference.
UA_UInt16 sourcePicoseconds
#define UA_TYPES_USERIDENTITYTOKEN
#define UA_STATUSCODE_BADINVALIDSELFREFERENCE
#define UA_STATUSCODE_GOODMOREDATA
#define SLIST_ENTRY(type)
UA_ResponseHeader responseHeader
UA_String transportProfileUri
#define UA_STATUSCODE_BADTOOMANYMATCHES
#define UA_NS0ID_SERVER_SERVERREDUNDANCY
void Service_UnregisterNodes(UA_Server *server, UA_Session *session, const UA_UnregisterNodesRequest *request, UA_UnregisterNodesResponse *response)
#define UA_TYPES_INT32
Int32 ^^^^^.
#define UA_NodeStore_newReferenceTypeNode()
#define UA_STATUSCODE_BADRESPONSETOOLARGE
#define UA_NS0ID_ADDREFERENCESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADUSERSIGNATUREINVALID
const UA_ObjectTypeNode * getObjectNodeType(UA_Server *server, const UA_ObjectNode *node)
BrowseNextRequest ^^^^^^^^^^^^^^^^^ Continues one or more browse operations.
UA_ResponseHeader responseHeader
size_t UA_calcSizeBinary(void *p, const UA_DataType *type)
#define UA_STATUSCODE_BADREFERENCETYPEIDINVALID
UA_Guid UA_Guid_random(void)
UA_StatusCode MonitoredItem_registerSampleJob(UA_Server *server, UA_MonitoredItem *mon)
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOKED
#define UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID
#define SIMPLEQ_FIRST(head)
UA_BrowsePathResult * results
const UA_encodeBinarySignature encodeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
UA_StatusCode getTypeHierarchy(UA_NodeStore *ns, const UA_Node *rootRef, UA_Boolean inverse, UA_NodeId **typeHierarchy, size_t *typeHierarchySize)
UA_Boolean publishingEnabled
#define UA_TYPES_COUNT
Every type is assigned an index in an array containing the type descriptions.
UA_Session * UA_SecureChannel_getSession(UA_SecureChannel *channel, UA_NodeId *token)
UA_ResponseHeader responseHeader
#define UA_OPEN62541_VER_MAJOR
Library Version
#define UA_NS0ID_HASPROPERTY
DeleteReferencesRequest ^^^^^^^^^^^^^^^^^^^^^^^ Delete one or more references from the server address...
Argument ^^^^^^^^ An argument for a method.
#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE
size_t subscriptionAcknowledgementsSize
UA_Boolean publishingEnabled
#define UA_NS0ID_HASDESCRIPTION
UA_UInt16 memberTypeIndex
UserNameIdentityToken ^^^^^^^^^^^^^^^^^^^^^ A token representing a user identified by a user name and...
UA_UInt32 * arrayDimensions
UA_StatusCode writeDataTypeAttribute(UA_Server *server, UA_VariableNode *node, const UA_NodeId *dataType, const UA_NodeId *constraintDataType)
#define UA_TYPES_CLOSESESSIONRESPONSE
#define UA_NS0ID_MODIFYSUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY
void Service_ActivateSession(UA_Server *server, UA_SecureChannel *channel, UA_Session *session, const UA_ActivateSessionRequest *request, UA_ActivateSessionResponse *response)
#define UA_STATUSCODE_BADNOCONTINUATIONPOINTS
UA_StatusCode UA_SessionManager_removeSession(UA_SessionManager *sm, const UA_NodeId *token)
#define UA_NS0ID_HASORDEREDCOMPONENT
#define UA_TYPES_DATACHANGEFILTER
#define UA_STATUSCODE_BADTYPEMISMATCH
UA_RequestHeader requestHeader
UA_BrowseDirection browseDirection
UA_NodeId referenceTypeId
#define UA_STATUSCODE_BADTCPINTERNALERROR
#define UA_STATUSCODE_BADTCPMESSAGETOOLARGE
void * UA_Array_new(size_t size, const UA_DataType *type)
CallMethodResult ^^^^^^^^^^^^^^^^.
#define UA_TYPES_UINT32
UInt32 ^^^^^^.
UA_UInt16 UA_Server_addNamespace(UA_Server *server, const char *name)
UA_StatusCode compatibleArrayDimensions(size_t constraintArrayDimensionsSize, const UA_UInt32 *constraintArrayDimensions, size_t testArrayDimensionsSize, const UA_UInt32 *testArrayDimensions)
TcpErrorMessage ^^^^^^^^^^^^^^^ Error Message.
#define UA_STATUSCODE_BADNOTIMPLEMENTED
UA_NODE_BASEATTRIBUTES UA_NODE_VARIABLEATTRIBUTES UA_Byte accessLevel
UA_ExtensionObjectEncoding
UA_VARIANT_ENCODINGMASKTYPE
#define UA_TYPES_BYTESTRING
ByteString ^^^^^^^^^^.
SignedSoftwareCertificate ^^^^^^^^^^^^^^^^^^^^^^^^^ A software certificate with a digital signature...
#define UA_STATUSCODE_BADVIEWIDUNKNOWN
#define UA_STATUSCODE_BADNODEATTRIBUTESINVALID
#define UA_TYPES_UINT64
UInt64 ^^^^^^.
UA_LocalizedText displayName
#define UA_STATUSCODE_BADDATALOST
#define UA_STATUSCODE_BADDEPENDENTVALUECHANGED
#define UA_NS0ID_SERVER_SERVERSTATUS_SECONDSTILLSHUTDOWN
UA_Boolean UA_Node_hasSubTypeOrInstances(const UA_Node *node)
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYCLIENT
#define UA_STATUSCODE_BADCERTIFICATEHOSTNAMEINVALID
#define UA_STATUSCODE_GOODCALLAGAIN
UA_UInt32 maxRequestMessageSize
UA_String UA_String_fromChars(char const src[])
#define CHECK_NODECLASS_WRITE(CLASS)
const UA_DataType * UA_findDataType(const UA_NodeId *typeId)
Builtin data types can be accessed as UA_TYPES[UA_TYPES_XXX], where XXX is the name of the data type...
#define UA_STATUSCODE_BADDATAENCODINGINVALID
UA_StatusCode UA_SecureChannel_generateNonce(UA_ByteString *nonce)
const UA_NodeId UA_NODEID_NULL
UA_ExtensionObject filter
#define UA_STATUSCODE_BADCERTIFICATECHAININCOMPLETE
#define UA_STATUSCODE_BADSESSIONIDINVALID
uint16_t UA_UInt16
UInt16 ^^^^^^ An integer value between 0 and 65 535.
#define UA_STATUSCODE_BADBROWSENAMEINVALID
#define UA_STATUSCODE_GOODNODATA
#define UA_NS0ID_UINTEGER
#define UA_NS0ID_HASCAUSE
UA_LocalizedText inverseName
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXBROWSECONTINUATIONPOINTS
#define UA_NS0ID_BASEDATAVARIABLETYPE
UA_ExtensionObject nodeAttributes
UA_Boolean hasLocalizedText
OpenSecureChannelResponse ^^^^^^^^^^^^^^^^^^^^^^^^^ Creates a secure channel with a server...
void Service_Read_single(UA_Server *server, UA_Session *session, UA_TimestampsToReturn timestamps, const UA_ReadValueId *id, UA_DataValue *v)
UA_ClientState UA_Client_getState(UA_Client *client)
UA_StatusCode UA_Server_delayedFree(UA_Server *server, void *data)
#define UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED
UA_Boolean hasSourcePicoseconds
struct UA_DiagnosticInfo * innerDiagnosticInfo
AddNodesRequest ^^^^^^^^^^^^^^^ Adds one or more nodes to the server address space.
#define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, MSG,...)
#define UA_TYPES_CREATESUBSCRIPTIONREQUEST
#define UA_NS0ID_VIEWSFOLDER
#define UA_TYPES_CALLMETHODRESULT
UA_AsymmetricAlgorithmSecurityHeader clientAsymAlgSettings
#define UA_TYPES_PUBLISHRESPONSE
UA_QualifiedName browseName
UA_SecurityTokenRequestType requestType
#define ADDPROFILEARRAY(x)
UA_StatusCode UA_Subscription_deleteMonitoredItem(UA_Server *server, UA_Subscription *sub, UA_UInt32 monitoredItemID)
UA_UInt32 protocolVersion
#define UA_TYPES_RELATIVEPATH
UA_StatusCode UA_SecureChannelManager_open(UA_SecureChannelManager *cm, UA_Connection *conn, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
#define UA_NS0ID_GENERATESEVENT
#define UA_NS0ID_GETENDPOINTSREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_BROWSERESPONSE
#define UA_TYPES_FINDSERVERSRESPONSE
#define UA_STATUSCODE_BADTIMEOUT
UA_Double revisedPublishingInterval
#define UA_TYPES_MODIFYSUBSCRIPTIONREQUEST
AddNodesResponse ^^^^^^^^^^^^^^^^ Adds one or more nodes to the server address space.
#define UA_STATUSCODE_BADNOVALIDCERTIFICATES
#define UA_TYPES_SBYTE
SByte ^^^^^.
struct channel_list_entry channel_list_entry
#define UA_TYPES_ADDNODESITEM
void Service_DeleteMonitoredItems(UA_Server *server, UA_Session *session, const UA_DeleteMonitoredItemsRequest *request, UA_DeleteMonitoredItemsResponse *response)
SetPublishingModeRequest ^^^^^^^^^^^^^^^^^^^^^^^^.
UA_NodeId referenceTypeId
const UA_Guid UA_GUID_NULL
#define UA_STATUSCODE_BADMONITOREDITEMFILTERUNSUPPORTED
UA_String * discoveryUrls
#define UA_TYPES_DELETENODESRESPONSE
UA_ByteString serverNonce
UA_BrowseResult UA_Server_browse(UA_Server *server, UA_UInt32 maxrefs, const UA_BrowseDescription *descr)
Browsing
UA_Double requestedPublishingInterval
#define TAILQ_LAST(head, headname)
UA_StatusCode readValueAttribute(UA_Server *server, const UA_VariableNode *vn, UA_DataValue *v)
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYREQUEST
void UA_NodeStore_deleteNode(UA_Node *node)
#define UA_NS0ID_SERVERCAPABILITIESTYPE
RegisterNodesResponse ^^^^^^^^^^^^^^^^^^^^^ Registers one or more nodes for repeated use within a ses...
UA_ResponseHeader responseHeader
UA_MonitoredItemModifyResult * results
size_t registeredNodeIdsSize
DeleteMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_StatusCode writeValueAttribute(UA_Server *server, UA_VariableNode *node, const UA_DataValue *value, const UA_String *indexRange)
#define UA_TYPES_CONTENTFILTER
#define UA_TRANSPORT_MESSAGETYPE
UA_UInt32 secondsTillShutdown
#define UA_NS0ID_PUBLISHREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_ARGUMENT
#define TAILQ_INSERT_HEAD(head, elm, field)
void UA_Array_delete(void *p, size_t size, const UA_DataType *type)
#define UA_STATUSCODE_BADNOTCONNECTED
#define UA_TYPES_ADDREFERENCESITEM
#define UA_STATUSCODE_BADSERVERHALTED
ContentFilterResult ^^^^^^^^^^^^^^^^^^^.
ReferenceNode ^^^^^^^^^^^^^ Specifies a reference which belongs to a node.
#define UA_TYPES_MESSAGESECURITYMODE
UA_DataChangeTrigger trigger
UA_EndpointDescription * endpoints
UA_ByteString clientNonce
UA_AddReferencesItem * referencesToAdd
#define UA_STATUSCODE_BADREQUESTTIMEOUT
UA_Boolean includeSubtypes
#define UA_NS0ID_HASCOMPONENT
#define UA_STATUSCODE_BADOUTOFRANGE
#define UA_STATUSCODE_BADQUERYTOOCOMPLEX
UA_UInt32 retransmitSequenceNumber
UA_ExpandedNodeId typeDefinition
#define UA_STATUSCODE_BADHISTORYOPERATIONINVALID
UA_StatusCode Subscription_registerPublishJob(UA_Server *server, UA_Subscription *sub)
UA_MonitoringParameters requestedParameters
GetEndpointsResponse ^^^^^^^^^^^^^^^^^^^^ Gets the endpoints used by the server.
#define UA_STATUSCODE_BADREFRESHINPROGRESS
UA_ApplicationDescription * servers
#define UA_TYPES_ADDNODESREQUEST
UA_ChannelSecurityToken securityToken
#define UA_TYPES_CREATESESSIONRESPONSE
CallResponse ^^^^^^^^^^^^.
uint64_t UA_UInt64
UInt64 ^^^^^^ An integer value between 0 and 18 446 744 073 709 551 615.
#define UA_TYPES_DELETEREFERENCESRESPONSE
#define UA_STATUSCODE_BADFILTERELEMENTINVALID
#define UA_NODEIDTYPE_NUMERIC_TWOBYTE
#define TAILQ_ENTRY(type)
UA_StatusCode UA_Server_setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId, const UA_DataSource dataSource)
#define UA_STATUSCODE_BADDIALOGRESPONSEINVALID
UA_StatusCode(* UA_exchangeEncodeBuffer)(void *handle, UA_ByteString *buf, size_t offset)
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTURI
SecureConversationMessageAbortBody ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Secure Conversation Message Abo...
SetMonitoringModeRequest ^^^^^^^^^^^^^^^^^^^^^^^^.
void() UA_ProcessMessageCallback(void *application, UA_SecureChannel *channel, UA_MessageType messageType, UA_UInt32 requestId, const UA_ByteString *message)
Chunking
#define UA_STATUSCODE_BADMONITOREDITEMIDINVALID
#define UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED
#define UA_TYPES_FLOAT
Float ^^^^^.
#define UA_STATUSCODE_BADTOOMANYSESSIONS
#define UA_STATUSCODE_BADIDENTITYCHANGENOTSUPPORTED
UA_Double revisedPublishingInterval
UA_Boolean containsNoLoops
void Service_OpenSecureChannel(UA_Server *server, UA_Connection *connection, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
SecureChannel Service Set This Service Set defines Services used to open a communication channel that...
#define UA_TYPES_REPUBLISHRESPONSE
UA_Boolean deleteBidirectional
UA_DateTime sourceTimestamp
size_t(* getJobs)(UA_ServerNetworkLayer *nl, UA_Job **jobs, UA_UInt16 timeout)
UA_DateTime nextChannelRenewal
#define UA_TYPES_MONITOREDITEMMODIFYREQUEST
UA_NodeId authenticationToken
#define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG,...)
#define UA_NS0ID_SERVER_GETMONITOREDITEMS_OUTPUTARGUMENTS
void UA_Session_deleteMembersCleanup(UA_Session *session, UA_Server *server)
#define UA_STATUSCODE_GOODNONCRITICALTIMEOUT
DeleteNodesRequest ^^^^^^^^^^^^^^^^^^ Delete one or more nodes from the server address space...
#define UA_TYPES_READRESPONSE
#define UA_STATUSCODE_BADNOTSUPPORTED
ContentFilter ^^^^^^^^^^^^^.
UA_Variant * inputArguments
UA_Server * UA_Server_new(const UA_ServerConfig config)
#define UA_LOG_WARNING_SESSION(LOGGER, SESSION, MSG,...)
SetPublishingModeResponse ^^^^^^^^^^^^^^^^^^^^^^^^^.
status(* UA_decodeBinarySignature)(void *UA_RESTRICT dst, const UA_DataType *type)
UA_MessageSecurityMode securityMode
#define UA_NODESTORE_TOMBSTONE
#define UA_STATUSCODE_BADNODEIDEXISTS
size_t userIdentityTokensSize
#define UA_TYPES_MONITOREDITEMCREATEREQUEST
#define UA_STATUSCODE_UNCERTAINSENSORNOTACCURATE
const UA_decodeBinarySignature decodeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
#define UA_NS0ID_WRITEREQUEST_ENCODING_DEFAULTBINARY
size_t notificationDataSize
UA_EndpointDescription * endpointDescriptions
UA_MonitoringParameters requestedParameters
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADINVALIDTIMESTAMPARGUMENT
UA_StatusCode UA_Client_writeArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId, const UA_UInt32 *newArrayDimensions, size_t newArrayDimensionsSize)
UA_ResponseHeader responseHeader
QueryDataSet ^^^^^^^^^^^^.
#define UA_TYPES_READREQUEST
void UA_NodeStore_iterate(UA_NodeStore *ns, UA_NodeStore_nodeVisitor visitor)
const UA_EXPORT UA_ClientConfig UA_ClientConfig_standard
#define UA_STATUSCODE_BADAGGREGATELISTMISMATCH
#define UA_STATUSCODE_BADOPERATIONABANDONED
void UA_SecureChannel_init(UA_SecureChannel *channel)
#define UA_TYPES_USERNAMEIDENTITYTOKEN
UA_StatusCode __UA_Server_write(UA_Server *server, const UA_NodeId *nodeId, const UA_AttributeId attributeId, const UA_DataType *attr_type, const void *attr)
#define SLIST_INSERT_HEAD(head, elm, field)
UA_ObjectLifecycleManagement lifecycleManagement
#define UA_TYPES_BROWSEREQUEST
#define UA_STATUSCODE_BADREFERENCELOCALONLY
#define UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED
#define UA_EXPANDEDNODEID_SERVERINDEX_FLAG
void Service_Call(UA_Server *server, UA_Session *session, const UA_CallRequest *request, UA_CallResponse *response)
void UA_SessionManager_cleanupTimedOut(UA_SessionManager *sm, UA_DateTime nowMonotonic)
UA_UInt32 requestedMaxReferencesPerNode
ReferenceTypeAttributes ^^^^^^^^^^^^^^^^^^^^^^^ The attributes for a reference type node...
#define UA_STATUSCODE_BADTOOMANYOPERATIONS
DeleteNodesResponse ^^^^^^^^^^^^^^^^^^^ Delete one or more nodes from the server address space...
#define UA_STATUSCODE_GOODDEPENDENTVALUECHANGED
UA_NodeClass targetNodeClass
UA_ExpandedNodeId typeDefinition
#define UA_NS0ID_SERVER_SERVERREDUNDANCY_REDUNDANCYSUPPORT
UA_Connection * connection
UA_ResponseHeader responseHeader
TranslateBrowsePathsToNodeIdsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Translates one or more pa...
#define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG,...)
size_t nodesToRegisterSize
UA_Connection UA_ClientConnectionTCP(UA_ConnectionConfig conf, const char *endpointUrl, UA_Logger logger)
UA_Node * UA_NodeStore_newNode(UA_NodeClass nodeClass)
Node Lifecycle ^^^^^^^^^^^^^^.
#define UA_NS0ID_DATATYPESFOLDER
UA_Boolean isNodeInTree(UA_NodeStore *ns, const UA_NodeId *leafNode, const UA_NodeId *nodeToFind, const UA_NodeId *referenceTypeIds, size_t referenceTypeIdsSize)
#define UA_STATUSCODE_BADMESSAGENOTAVAILABLE
#define UA_TYPES_ADDNODESRESPONSE
void Service_Publish(UA_Server *server, UA_Session *session, const UA_PublishRequest *request, UA_UInt32 requestId)
UA_StatusCode UA_Variant_setRangeCopy(UA_Variant *v, const void *array, size_t arraySize, const UA_NumericRange range)
#define UA_TYPES_PARSINGRESULT
#define UA_PRINTF_GUID_DATA(GUID)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MINSUPPORTEDSAMPLERATE
void UA_SecureChannelManager_deleteMembers(UA_SecureChannelManager *cm)
#define UA_ASSERT_RCU_UNLOCKED()
#define UA_SEC_TO_DATETIME
void(* UA_ServerCallback)(UA_Server *server, void *data)
UA_UInt32 maxResponseMessageSize
UA_StatusCode UA_Server_run_startup(UA_Server *server)
ViewDescription ^^^^^^^^^^^^^^^ The view to browse.
#define UA_NS0ID_REFERENCES
#define UA_NS0ID_DELETENODESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADREQUESTINTERRUPTED
void(* UA_NodeStore_nodeVisitor)(const UA_Node *node)
Iteration ^^^^^^^^^ The following definitions are used to call a callback for every node in the nodes...
#define UA_TYPES_STRING
String ^^^^^^.
uint32_t pcg32_random_r(pcg32_random_t *rng)
RepublishResponse ^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_LOCALIZEDTEXT
CreateSubscriptionResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^.
BrowseResponse ^^^^^^^^^^^^^^ Browse the references for one or more nodes from the server address spa...
float UA_Float
Float ^^^^^ An IEEE single precision (32 bit) floating point value.
#define UA_NS0ID_HASMODELPARENT
UA_Boolean hasServerTimestamp
UA_NodeStoreEntry ** entries
#define UA_STATUSCODE_BADNOTFOUND
UA_ResponseHeader responseHeader
UA_LocalizedText description
UA_SecureChannel * UA_SecureChannelManager_get(UA_SecureChannelManager *cm, UA_UInt32 channelId)
#define UA_STATUSCODE_BADSERVERNAMEMISSING
#define UA_STATUSCODE_BADDATAUNAVAILABLE
void Service_Browse(UA_Server *server, UA_Session *session, const UA_BrowseRequest *request, UA_BrowseResponse *response)
UA_Session * UA_SessionManager_getSession(UA_SessionManager *sm, const UA_NodeId *token)
#define UA_NS0ID_XMLELEMENT
void __UA_Client_Service(UA_Client *client, const void *request, const UA_DataType *requestType, void *response, const UA_DataType *responseType)
UA_StatusCode UA_decodeBinary(const UA_ByteString *src, size_t *offset, void *dst, const UA_DataType *type) UA_FUNC_ATTR_WARN_UNUSED_RESULT
UA_String UA_DateTime_toString(UA_DateTime t)
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDNUMBER
#define UA_NS0ID_SERVERDIAGNOSTICSTYPE
#define UA_NS0ID_DELETEREFERENCESREQUEST_ENCODING_DEFAULTBINARY
UA_UInt32 requestedLifetimeCount
void MonitoredItem_delete(UA_Server *server, UA_MonitoredItem *monitoredItem)
#define UA_TYPES_BROWSENEXTREQUEST
UA_Connection * connection
#define VERSION(MAJOR, MINOR, PATCH, LABEL)
void UA_Log_Stdout(UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args)
UA_ResponseHeader responseHeader
UA_MessageSecurityMode securityMode
void UA_Connection_deleteMembers(UA_Connection *connection)
UA_StatusCode UA_EndpointUrl_split_ptr(const char *endpointUrl, char *hostname, const char **port, const char **path)
void Service_CreateSubscription(UA_Server *server, UA_Session *session, const UA_CreateSubscriptionRequest *request, UA_CreateSubscriptionResponse *response)
Subscription Service Set Subscriptions are used to report Notifications to the Client.
#define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG,...)
Log Helper
#define UA_STATUSCODE_BADEXPECTEDSTREAMTOBLOCK
#define UA_STATUSCODE_BADSTRUCTUREMISSING
UA_StatusCode __UA_Client_writeAttribute(UA_Client *client, const UA_NodeId *nodeId, UA_AttributeId attributeId, const void *in, const UA_DataType *inDataType)
#define UA_NS0ID_HASEFFECT
void Service_CreateMonitoredItems(UA_Server *server, UA_Session *session, const UA_CreateMonitoredItemsRequest *request, UA_CreateMonitoredItemsResponse *response)
MonitoredItem Service Set Clients define MonitoredItems to subscribe to data and Events.
UA_DeleteReferencesItem * referencesToDelete
void Service_Read(UA_Server *server, UA_Session *session, const UA_ReadRequest *request, UA_ReadResponse *response)
Query Service Set This Service Set is used to issue a Query to a Server.
#define UA_TYPES_WRITEVALUE
#define UA_SECURE_MESSAGE_HEADER_LENGTH
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDDATE
ObjectTypeAttributes ^^^^^^^^^^^^^^^^^^^^ The attributes for an object type node. ...
UA_ExtensionObject userIdentityToken
UA_StatusCode UA_Server_deleteReference(UA_Server *server, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_ExpandedNodeId targetNodeId, UA_Boolean deleteBidirectional)
UA_Boolean UA_String_equal(const UA_String *s1, const UA_String *s2)
UserTokenPolicy ^^^^^^^^^^^^^^^ Describes a user token that can be used with a server.
UA_ResponseHeader responseHeader
UA_Boolean hasInnerDiagnosticInfo
#define UA_STATUSCODE_BADENTRYEXISTS
#define CHECK_DATATYPE_SCALAR(EXP_DT)
#define UA_STATUSCODE_BADVIEWVERSIONINVALID
struct UA_DelayedJob UA_DelayedJob
#define UA_NS0ID_HASSUBTYPE
UA_BrowseResultMask
BrowseResultMask ^^^^^^^^^^^^^^^^ A bit mask which specifies what should be returned in a browse resp...
#define UA_TYPES_USERTOKENTYPE
UA_RequestHeader requestHeader
#define UA_TYPES_ADDREFERENCESRESPONSE
UA_UInt32 revisedMaxKeepAliveCount
void(* deleteMembers)(UA_ServerNetworkLayer *nl)
Deletes the network content.
UA_StatusCode UA_Client_readArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId, UA_UInt32 **outArrayDimensions, size_t *outArrayDimensionsSize)
UA_ValueSource
VariableNode
#define UA_TYPES_CLOSESESSIONREQUEST
#define UA_TYPES_DELETESUBSCRIPTIONSRESPONSE
UA_UInt32 protocolVersion
UA_ResponseHeader responseHeader
void Service_Call_single(UA_Server *server, UA_Session *session, const UA_CallMethodRequest *request, UA_CallMethodResult *result)
UA_UInt16 UA_Server_run_iterate(UA_Server *server, UA_Boolean waitInternal)
#define UA_NS0ID_ADDNODESREQUEST_ENCODING_DEFAULTBINARY
void * UA_new(const UA_DataType *type)
The following functions are used for generic handling of data types.
UA_UInt32 requestedMaxKeepAliveCount
#define UA_STATUSCODE_BADSECURECHANNELTOKENUNKNOWN
#define UA_STATUSCODE_BADSERVERURIINVALID
#define UA_NS0ID_DATAVALUE
FindServersResponse ^^^^^^^^^^^^^^^^^^^ Finds the servers known to the discovery server.
UA_StatusCode UA_Server_setVariableNode_valueCallback(UA_Server *server, const UA_NodeId nodeId, const UA_ValueCallback callback)
#define UA_STATUSCODE_BADNODENOTINVIEW
UA_StatusCode __UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_NodeAttributes *attr, const UA_DataType *attributeType, UA_InstantiationCallback *instantiationCallback, UA_NodeId *outNewNodeId)
size_t outputArgumentsSize
CloseSessionResponse ^^^^^^^^^^^^^^^^^^^^ Closes a session with the server.
#define UA_TYPES_FINDSERVERSREQUEST
UA_StatusCode UA_Server_run(UA_Server *server, volatile UA_Boolean *running)
#define MANUFACTURER_NAME
UA_UInt32 maxResponseMessageSize
UA_DateTime serverTimestamp
UA_NODE_BASEATTRIBUTES UA_Byte eventNotifier
UA_String UA_XmlElement
XmlElement ^^^^^^^^^^ An XML element.
NodeAttributes ^^^^^^^^^^^^^^ The base attributes for all nodes.
NotificationMessage ^^^^^^^^^^^^^^^^^^^.
UA_ExpandedNodeId parentNodeId
#define UA_TYPES_REPUBLISHREQUEST
#define UA_STATUSCODE_BADSECURECHANNELIDINVALID
UA_NodeId referenceTypeId
#define UA_USEC_TO_DATETIME
#define UA_NS0ID_PROPERTYTYPE
UA_UInt16 availableContinuationPoints
void Service_CloseSession(UA_Server *server, UA_Session *session, const UA_CloseSessionRequest *request, UA_CloseSessionResponse *response)
#define UA_TYPES_BROWSEPATHRESULT
#define UA_TRANSPORT_SYMMETRICALGORITHMSECURITYHEADER
#define UA_NS0ID_HASTYPEDEFINITION
#define UA_MINMESSAGESIZE
#define UA_PRINTF_STRING_DATA(STRING)
#define UA_NS0ID_HIERARCHICALREFERENCES
UA_UInt32 revisedLifetimeCount
UA_BrowsePathTarget * targets
Networking Client-server connection is represented by a UA_Connection structure.
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO
#define UA_NS0ID_TYPESFOLDER
#define UA_NS0ID_SERVER_SERVERDIAGNOSTICS_ENABLEDFLAG
UA_UInt32 * monitoredItemIds
UA_WriteValue * nodesToWrite
#define UA_TYPES_DELETENODESITEM
UA_DataValue UA_Server_read(UA_Server *server, const UA_ReadValueId *item, UA_TimestampsToReturn timestamps)
Reading and Writing Node Attributes The functions for reading and writing node attributes call the re...
#define UA_STATUSCODE_BADTOOMANYARGUMENTS
#define UA_NS0ID_CREATESUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY
DataChangeFilter ^^^^^^^^^^^^^^^^.
UA_MonitoredItemCreateRequest * itemsToCreate
#define UA_STATUSCODE_BADBOUNDNOTFOUND
MethodAttributes ^^^^^^^^^^^^^^^^ The attributes for a method node.
UnregisterNodesRequest ^^^^^^^^^^^^^^^^^^^^^^ Unregisters one or more previously registered nodes...
#define UA_NS0ID_BYTESTRING
#define UA_STATUSCODE_BADNOCOMMUNICATION
#define UA_TYPES_SERVERSTATUSDATATYPE
#define UA_STATUSCODE_BADTIMESTAMPSTORETURNINVALID
#define UA_TYPES_DATACHANGENOTIFICATION
#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT
#define UA_STRING_STATIC_NULL
#define UA_STATUSCODE_BADINVALIDARGUMENT
void Service_SetMonitoringMode(UA_Server *server, UA_Session *session, const UA_SetMonitoringModeRequest *request, UA_SetMonitoringModeResponse *response)
void Service_FindServers(UA_Server *server, UA_Session *session, const UA_FindServersRequest *request, UA_FindServersResponse *response)
Discovery Service Set This Service Set defines Services used to discover the Endpoints implemented by...
#define UA_STATUSCODE_GOODPOSTACTIONFAILED
#define UA_STATUSCODE_UNCERTAINSUBNORMAL
UA_StatusCode(* start)(UA_ServerNetworkLayer *nl, UA_Logger logger)
#define UA_fd_isset(fd, fds)
UA_NumericRangeDimension * dimensions
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_GOODCOMMUNICATIONEVENT
const UA_calcSizeBinarySignature calcSizeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
#define UA_NODESTORE_MINSIZE
#define UA_STATUSCODE_BADOBJECTDELETED
UA_Boolean hasNamespaceUri
#define UA_STATUSCODE_BADTCPENDPOINTURLINVALID
union UA_ExtensionObject::@1 content
UA_ApplicationDescription server
#define UA_STATUSCODE_GOODSHUTDOWNEVENT
#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE
#define UA_STATUSCODE_BADSECURITYMODEREJECTED
#define UA_NS0ID_SERVER_SERVERSTATUS_SHUTDOWNREASON
UA_Boolean deleteTargetReferences
#define UA_TRANSPORT_ASYMMETRICALGORITHMSECURITYHEADER
UA_UInt32 protocolVersion
TcpHelloMessage ^^^^^^^^^^^^^^^ Hello Message.
#define UA_STATUSCODE_BADNODECLASSINVALID
UA_Subscription * UA_Subscription_new(UA_Session *session, UA_UInt32 subscriptionID)
ChannelSecurityToken ^^^^^^^^^^^^^^^^^^^^ The token that identifies a set of keys for an active secur...
UA_Client_Authentication authenticationMethod
#define UA_TYPES_NODEATTRIBUTES
#define UA_TYPES_MODIFYMONITOREDITEMSRESPONSE
#define UA_TYPES_DEADBANDTYPE
Server Configuration The following structure is passed to a new server for configuration.
#define UA_TYPES_REFERENCETYPEATTRIBUTES
#define UA_STATUSCODE_BADCERTIFICATEREVOKED
#define UA_NS0ID_CREATEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADNOMATCH
#define UA_STATUSCODE_GOODEDITED
UA_AttributeId
Standard-Defined Constants This section contains numerical and string constants that are defined in t...
#define TAILQ_FIRST(head)
#define UA_TYPES_CALLREQUEST
ViewAttributes ^^^^^^^^^^^^^^ The attributes for a view node.
#define UA_ASSERT_RCU_LOCKED()
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTNAME
enum UA_NodeIdType identifierType
#define UA_STATUSCODE_BADTOOMANYSUBSCRIPTIONS
#define UA_STATUSCODE_BADSEMPAHOREFILEMISSING
#define UA_STATUSCODE_BADDISCOVERYURLMISSING
UA_BrowseDescription * nodesToBrowse
#define UA_NS0ID_MODELLINGRULE_MANDATORY
DeleteNodesItem ^^^^^^^^^^^^^^^ A request to delete a node to the server address space.
#define UA_NodeStore_newDataTypeNode()
UA_CallMethodRequest * methodsToCall
struct UA_NodeStoreEntry UA_NodeStoreEntry
UA_MessageSecurityMode securityMode
#define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG,...)
UA_MonitoredItemModifyRequest * itemsToModify
int16_t UA_Int16
Int16 ^^^^^ An integer value between -32 768 and 32 767.
UA_StatusCode UA_EndpointUrl_split(const char *endpointUrl, char *hostname, UA_UInt16 *port, const char **path)
EndpointURL Helper ^^^^^^^^^^^^^^^^^^.
UA_Boolean includeSubtypes
#define MAXTIMEOUT
There are four types of job execution:
#define UA_TRANSPORT_CHUNKTYPE
UA_StatusCode UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId, UA_Boolean deleteReferences)
#define UA_NS0ID_SERVER_SERVERSTATUS_STARTTIME
#define UA_STATUSCODE_BADCERTIFICATEISSUERTIMEINVALID
void Service_CloseSecureChannel(UA_Server *server, UA_SecureChannel *channel)
UA_NODE_BASEATTRIBUTES UA_NODE_VARIABLEATTRIBUTES UA_Boolean isAbstract
QueryDataDescription ^^^^^^^^^^^^^^^^^^^^.
#define UA_OPEN62541_VER_MINOR
UA_StatusCode UA_SecureChannelManager_init(UA_SecureChannelManager *cm, UA_Server *server)
UA_UInt32 receiveBufferSize
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
UA_ResponseHeader responseHeader
#define UA_TYPES_BYTE
Byte ^^^^.
UA_LocalizedText displayName
BrowseNextResponse ^^^^^^^^^^^^^^^^^^ Continues one or more browse operations.
#define UA_NS0ID_BASEOBJECTTYPE
DeleteReferencesItem ^^^^^^^^^^^^^^^^^^^^ A request to delete a node from the server address space...
int32_t UA_Int32
Int32 ^^^^^ An integer value between -2 147 483 648 and 2 147 483 647.
void UA_Session_updateLifetime(UA_Session *session)
#define UA_STATUSCODE_UNCERTAINDOMINANTVALUECHANGED
MonitoredItemCreateResult ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADSECURECHANNELCLOSED
UA_ConnectionConfig localConf
UA_DateTime UA_DateTime_nowMonotonic(void)
UA_String encryptionAlgorithm
UA_ExpandedNodeId targetId
const UA_String UA_STRING_NULL
#define UA_STATUSCODE_GOODRESULTSMAYBEINCOMPLETE
UA_ByteString * continuationPoints
UA_UInt32 UA_UInt32_random(void)
#define UA_TYPES_MONITORINGPARAMETERS
ExpandedNodeId ^^^^^^^^^^^^^^ A NodeId that allows the namespace URI to be specified instead of an in...
ParsingResult ^^^^^^^^^^^^^.
UA_UInt16 addNamespace(UA_Server *server, const UA_String name)
#define UA_PRINTF_GUID_FORMAT
Convenience macros for complex types ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
CallMethodRequest ^^^^^^^^^^^^^^^^^.
void Service_DeleteSubscriptions(UA_Server *server, UA_Session *session, const UA_DeleteSubscriptionsRequest *request, UA_DeleteSubscriptionsResponse *response)
UA_UInt32 maxNotificationsPerPublish
#define UA_STATUSCODE_BADPROTOCOLVERSIONUNSUPPORTED
#define UA_STATUSCODE_BADSEQUENCENUMBERUNKNOWN
#define UA_realloc(ptr, size)
UA_RequestHeader requestHeader
#define UA_NS0ID_STATUSCODE
UA_ExpandedNodeId targetNodeId
UA_ByteString serverCertificate
ActivateSessionResponse ^^^^^^^^^^^^^^^^^^^^^^^ Activates a session with the server.
VariableAttributes ^^^^^^^^^^^^^^^^^^ The attributes for a variable node.
#define UA_STATUSCODE_BADSERVERINDEXINVALID
UA_IdType
IdType ^^^^^^ The type of identifier used in a node id.
UA_StatusCode UA_Subscription_removeRetransmissionMessage(UA_Subscription *sub, UA_UInt32 sequenceNumber)
void UA_random_seed(UA_UInt64 seed)
Random Number Generator If UA_ENABLE_MULTITHREADING is defined, then the seed is stored in thread loc...
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADREQUESTTYPEINVALID
#define UA_TYPES_SERVICEFAULT
#define UA_TYPES_APPLICATIONTYPE
UA_StatusCode UA_NodeStore_replace(UA_NodeStore *ns, UA_Node *node)
UA_Boolean deleteSubscriptions
const char * LogLevelNames[6]
UA_ChunkType
ChunkType ^^^^^^^^^ Type of the chunk.
UA_UInt16 serverPicoseconds
UA_ApplicationDescription clientDescription
WriteResponse ^^^^^^^^^^^^^.
SubscriptionAcknowledgement ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
void UA_Server_delete(UA_Server *server)
UA_Double minimumSamplingInterval
UA_StatusCode UA_Variant_setArrayCopy(UA_Variant *v, const void *array, size_t arraySize, const UA_DataType *type)
#define UA_STATUSCODE_BADSYNTAXERROR
#define UA_TYPES_MONITOREDITEMNOTIFICATION
#define UA_STATUSCODE_BADREFERENCENOTALLOWED
UA_CallMethodResult * results
#define UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME
UserIdentityToken ^^^^^^^^^^^^^^^^^ A base type for a user identity token.
UA_StatusCode(* send)(UA_Connection *connection, UA_ByteString *buf)
UA_StatusCode UA_Client_addReference(UA_Client *client, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_String targetServerUri, const UA_ExpandedNodeId targetNodeId, UA_NodeClass targetNodeClass)
#define UA_NS0ID_ACTIVATESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_DATACHANGETRIGGER
#define UA_STATUSCODE_BADSEQUENCENUMBERINVALID
QueryNextResponse ^^^^^^^^^^^^^^^^^.
UA_NodeAttributesMask
NodeAttributesMask ^^^^^^^^^^^^^^^^^^ The bits used to specify default attributes for a new node...
#define UA_TYPES_VARIABLEATTRIBUTES
UA_BrowsePath * browsePaths
#define UA_NS0ID_DELETEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
UA_Boolean releaseContinuationPoints
#define UA_TYPES_CALLMETHODREQUEST
#define UA_NODEIDTYPE_NUMERIC_FOURBYTE
#define UA_STATUSCODE_BADOUTOFMEMORY
UA_LocalizedText inverseName
UA_Double revisedSamplingInterval
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYACKED
#define UA_NodeStore_newObjectNode()
#define UA_TYPES_CHANNELSECURITYTOKEN
UA_MethodCallback attachedMethod
#define UA_TYPES_BOOLEAN
Boolean ^^^^^^^.
#define UA_STATUSCODE_BADSESSIONNOTACTIVATED
#define UA_STATUSCODE_GOODCOMPLETESASYNCHRONOUSLY
#define SIMPLEQ_REMOVE_HEAD(head, field)
size_t arrayDimensionsSize
#define UA_NS0ID_SERVER_SERVERARRAY
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADMAXCONNECTIONSREACHED
UA_MonitoredItem * UA_Subscription_getMonitoredItem(UA_Subscription *sub, UA_UInt32 monitoredItemID)
#define UA_TYPES_BROWSEDESCRIPTION
#define UA_TYPES_CONTENTFILTERELEMENTRESULT
#define UA_STATUSCODE_BADBOUNDNOTSUPPORTED
#define UA_TYPES_REFERENCENODE
#define UA_NODEIDTYPE_NUMERIC_COMPLETE
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOCATIONUNKNOWN
void UA_Subscription_deleteMembers(UA_Subscription *subscription, UA_Server *server)
#define UA_STATUSCODE_BADSERVICEUNSUPPORTED
UA_UInt32 maxNotificationsPerPublish
Guid ^^^^ A 16 byte value that can be used as a globally unique identifier.
UA_MessageSecurityMode
MessageSecurityMode ^^^^^^^^^^^^^^^^^^^ The type of security to use on a message. ...
UA_StatusCode UA_Node_copyAnyNodeClass(const UA_Node *src, UA_Node *dst)
String ^^^^^^ A sequence of Unicode characters.
#define UA_STATUSCODE_BADRESOURCEUNAVAILABLE
const UA_Node * UA_NodeStore_get(UA_NodeStore *ns, const UA_NodeId *nodeid)
MonitoringParameters ^^^^^^^^^^^^^^^^^^^^.
#define SIMPLEQ_HEAD(name, type)
UA_DeadbandType
DeadbandType ^^^^^^^^^^^^.
UA_ResponseHeader responseHeader
#define UA_TYPES_MONITOREDITEMMODIFYRESULT
UA_UInt32 monitoredItemId
#define UA_assert(ignore)
#define UA_NS0ID_DELETESUBSCRIPTIONSREQUEST_ENCODING_DEFAULTBINARY
#define SIMPLEQ_INIT(head)
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEFOOTER
void UA_Connection_attachSecureChannel(UA_Connection *connection, UA_SecureChannel *channel)
size_t inputArgumentsSize
UA_StatusCode UA_Server_setObjectTypeNode_lifecycleManagement(UA_Server *server, UA_NodeId nodeId, UA_ObjectLifecycleManagement olm)
UA_NodeId authenticationToken
#define UA_TYPES_VIEWATTRIBUTES
#define UA_STATUSCODE_BADTOOMANYPUBLISHREQUESTS
UA_RequestHeader requestHeader
size_t(* stop)(UA_ServerNetworkLayer *nl, UA_Job **jobs)
UA_UInt32 receiveSequenceNumber
#define UA_STATUSCODE_BADNODELETERIGHTS
#define UA_STATUSCODE_BADPARENTNODEIDINVALID
DeleteMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADEVENTNOTACKNOWLEDGEABLE
UA_StatusCode UA_Connection_completeMessages(UA_Connection *connection, UA_ByteString *message, UA_Boolean *realloced)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_AGGREGATEFUNCTIONS
#define UA_STATUSCODE_BADNONCEINVALID
UA_Boolean UA_NodeId_isNull(const UA_NodeId *p)
void UA_Node_deleteMembersAnyNodeClass(UA_Node *node)
#define UA_TYPES_LOCALIZEDTEXT
LocalizedText ^^^^^^^^^^^^^.
AddReferencesResponse ^^^^^^^^^^^^^^^^^^^^^ Adds one or more references to the server address space...
const UA_EXPORT UA_ServerConfig UA_ServerConfig_standard
UA_StatusCode(* UA_NodeIteratorCallback)(UA_NodeId childId, UA_Boolean isInverse, UA_NodeId referenceTypeId, void *handle)
UA_Boolean userExecutable
UA_Double requestedPublishingInterval
#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST
UA_ConnectionConfig remoteConf
UA_BrowseResult UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint, const UA_ByteString *continuationPoint)
const UA_Node * getNodeType(UA_Server *server, const UA_Node *node)
#define UA_TYPES_RESPONSEHEADER
UA_StatusCode UA_Server_run_shutdown(UA_Server *server)
#define UA_STATUSCODE_BADIDENTITYTOKENREJECTED
#define UA_NODE_VARIABLEATTRIBUTES
#define UA_STATUSCODE_BADSESSIONCLOSED
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_GOOD
#define UA_STATUSCODE_BADNOTTYPEDEFINITION
#define UA_STATUSCODE_BADNOTHINGTODO
#define UA_NS0ID_REGISTERNODESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_GOODCLAMPED
size_t referencesToAddSize
UA_EXPORT const UA_DataType UA_TRANSPORT[UA_TRANSPORT_COUNT]
struct UA_SecureChannelManager UA_SecureChannelManager
UA_ExpandedNodeId requestedNewNodeId
#define UA_STATUSCODE_BADNOTREADABLE
UA_StatusCode UA_Variant_setScalarCopy(UA_Variant *v, const void *p, const UA_DataType *type)
void UA_SecureChannel_detachSession(UA_SecureChannel *channel, UA_Session *session)
#define UA_TYPES_UNREGISTERNODESRESPONSE
void Service_ModifySubscription(UA_Server *server, UA_Session *session, const UA_ModifySubscriptionRequest *request, UA_ModifySubscriptionResponse *response)
UA_UInt32 requestedLifetimeCount
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXHISTORYCONTINUATIONPOINTS
UA_StatusCode typeCheckValue(UA_Server *server, const UA_NodeId *targetDataTypeId, UA_Int32 targetValueRank, size_t targetArrayDimensionsSize, const UA_UInt32 *targetArrayDimensions, const UA_Variant *value, const UA_NumericRange *range, UA_Variant *editableValue)
#define UA_NS0ID_ROOTFOLDER
UA_ResponseHeader responseHeader
UA_StatusCode UA_Client_getEndpoints(UA_Client *client, const char *serverUrl, size_t *endpointDescriptionsSize, UA_EndpointDescription **endpointDescriptions)
int8_t UA_SByte
SByte ^^^^^ An integer value between -128 and 127.
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_LOCALEIDARRAY
UA_Boolean UA_NodeId_equal(const UA_NodeId *n1, const UA_NodeId *n2)
#define UA_TYPES_FILTEROPERATOR
#define UA_TYPES_CLOSESECURECHANNELREQUEST
#define UA_NS0ID_SETMONITORINGMODEREQUEST_ENCODING_DEFAULTBINARY
CloseSessionRequest ^^^^^^^^^^^^^^^^^^^ Closes a session with the server.
#define UA_STATUSCODE_BADCERTIFICATETIMEINVALID
ReadResponse ^^^^^^^^^^^^.
#define UA_STATUSCODE_GOODSUBSCRIPTIONTRANSFERRED
UA_BrowseDirection
BrowseDirection ^^^^^^^^^^^^^^^ The directions of the references to return.
#define UA_NS0ID_DATETIME
WriteRequest ^^^^^^^^^^^^.
const UA_StatusCodeDescription * UA_StatusCode_description(UA_StatusCode code)
UA_StatusCode MonitoredItem_unregisterSampleJob(UA_Server *server, UA_MonitoredItem *mon)
#define UA_TYPES_VIEWDESCRIPTION
void UA_NodeStore_delete(UA_NodeStore *ns)
#define UA_TYPES_QUERYFIRSTREQUEST
#define UA_NS0ID_SERVER_SERVERSTATUS
#define UA_NS0ID_STRUCTURE
UA_StatusCode parse_numericrange(const UA_String *str, UA_NumericRange *range)
#define UA_STATUSCODE_BADUSERACCESSDENIED
#define UA_STATUSCODE_UNCERTAINNOTALLNODESAVAILABLE
#define UA_NS0ID_SETPUBLISHINGMODEREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode writeValueRankAttribute(UA_Server *server, UA_VariableNode *node, UA_Int32 valueRank, UA_Int32 constraintValueRank)
void Service_AddNodes(UA_Server *server, UA_Session *session, const UA_AddNodesRequest *request, UA_AddNodesResponse *response)
NodeManagement Service Set This Service Set defines Services to add and delete AddressSpace Nodes and...
UA_StatusCode __UA_Client_addNode(UA_Client *client, const UA_NodeClass nodeClass, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_NodeAttributes *attr, const UA_DataType *attributeType, UA_NodeId *outNewNodeId)
#define UA_STATUSCODE_BADDATAENCODINGUNSUPPORTED
ActivateSessionRequest ^^^^^^^^^^^^^^^^^^^^^^ Activates a session with the server.
#define UA_STATUSCODE_BADCONNECTIONCLOSED
UA_SecureChannel * channel
UA_StatusCode UA_SecureChannel_sendBinaryMessage(UA_SecureChannel *channel, UA_UInt32 requestId, const void *content, const UA_DataType *contentType)
#define UA_STATUSCODE_GOODENTRYINSERTED
#define UA_STATUSCODE_BADCOMMUNICATIONERROR
#define UA_TYPES_STATUSCODE
StatusCode ^^^^^^^^^^.
void UA_SessionManager_deleteMembers(UA_SessionManager *sm)
size_t(* UA_calcSizeBinarySignature)(const void *UA_RESTRICT p, const UA_DataType *contenttype)
#define UA_TYPES_BROWSEDIRECTION
CloseSecureChannelRequest ^^^^^^^^^^^^^^^^^^^^^^^^^ Closes a secure channel.
#define UA_STATUSCODE_BADREQUESTHEADERINVALID
#define UA_TYPES_REGISTERNODESREQUEST
#define UA_TYPES_EXTENSIONOBJECT
ExtensionObject ^^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES
#define UA_TYPES_UNREGISTERNODESREQUEST
#define PCG32_INITIALIZER
UA_SessionManager sessionManager
UA_ResponseHeader responseHeader
UA_UInt32 requestedMaxKeepAliveCount
SetMonitoringModeResponse ^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_UInt32 revisedQueueSize
#define UA_TYPES_BROWSERESULT
ServerStatusDataType ^^^^^^^^^^^^^^^^^^^^.
UA_ByteString serverNonce
void(* releaseSendBuffer)(UA_Connection *connection, UA_ByteString *buf)
UA_Connection * closeConnection
#define LIST_FOREACH_SAFE(var, head, field, tvar)
void Service_DeleteReferences(UA_Server *server, UA_Session *session, const UA_DeleteReferencesRequest *request, UA_DeleteReferencesResponse *response)
UA_UInt32 UA_NodeId_hash(const UA_NodeId *n)
void Service_GetEndpoints(UA_Server *server, UA_Session *session, const UA_GetEndpointsRequest *request, UA_GetEndpointsResponse *response)
UA_NodeId referenceTypeId
UA_StatusCode UA_Variant_setRange(UA_Variant *v, void *UA_RESTRICT array, size_t arraySize, const UA_NumericRange range)
#define UA_STATUSCODE_BADSECURITYMODEINSUFFICIENT
UA_Double revisedSamplingInterval
BrowsePath ^^^^^^^^^^ A request to translate a path into a node id.
#define UA_TYPES_QUERYNEXTRESPONSE
DeleteSubscriptionsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
RelativePathElement ^^^^^^^^^^^^^^^^^^^ An element in a relative path.
#define UA_STATUSCODE_BADSECURITYCHECKSFAILED
UA_LocalizedText displayName
UA_NotificationMessage notificationMessage
UA_FilterOperator
FilterOperator ^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADCONDITIONNOTSHELVED
#define UA_TYPES_MONITOREDITEMCREATERESULT
#define UA_calloc(num, size)
uint8_t UA_Byte
Byte ^^^^ An integer value between 0 and 255.
BrowseResult ^^^^^^^^^^^^ The result of a browse operation.
UA_DateTimeStruct UA_DateTime_toStruct(UA_DateTime t)
void UA_Session_init(UA_Session *session)
#define UA_STATUSCODE_BADMETHODINVALID
#define UA_STATUSCODE_BADSENSORFAILURE
#define UA_STATUSCODE_BADCERTIFICATEREVOCATIONUNKNOWN
void UA_SecureChannel_deleteMembersCleanup(UA_SecureChannel *channel)
#define UA_STATUSCODE_BADFILTEROPERANDCOUNTMISMATCH
#define UA_NS0ID_HASNOTIFIER
#define UA_TYPES_DELETEREFERENCESREQUEST
UA_QualifiedName dataEncoding
UA_UInt32 * subscriptionIds
#define UA_STATUSCODE_BADAGGREGATENOTSUPPORTED
VariableTypeAttributes ^^^^^^^^^^^^^^^^^^^^^^ The attributes for a variable type node.
UA_Boolean hasInnerStatusCode
#define UA_TYPES_NOTIFICATIONMESSAGE
#define UA_TYPES_TIMESTAMPSTORETURN
UA_ReferenceDescription * references
#define UA_STATUSCODE_BADNOSUBSCRIPTION
UA_StatusCode(* getSendBuffer)(UA_Connection *connection, size_t length, UA_ByteString *buf)
CloseSecureChannelResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^ Closes a secure channel.
#define UA_TYPES_SECURITYTOKENREQUESTTYPE
UA_AddNodesResult * results
#define UA_STATUSCODE_BADUNEXPECTEDERROR
#define UA_TYPES_DELETESUBSCRIPTIONSREQUEST
#define UA_STATUSCODE_BADWRITENOTSUPPORTED
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_SOFTWARECERTIFICATES
UA_Boolean hasAdditionalInfo
UA_ByteString clientNonce
#define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG
#define UA_NS0ID_BUILDINFOTYPE
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADWAITINGFORRESPONSE
UA_NODE_BASEATTRIBUTES UA_Byte eventNotifier
#define UA_TYPES_ANONYMOUSIDENTITYTOKEN
void UA_delete(void *p, const UA_DataType *type)
UA_ServerState
ServerState ^^^^^^^^^^^.
UA_UInt32 * availableSequenceNumbers
#define UA_STATUSCODE_BADUNKNOWNRESPONSE
void UA_Subscription_answerPublishRequestsNoSubscription(UA_Server *server, UA_NodeId *sessionToken)
GetEndpointsRequest ^^^^^^^^^^^^^^^^^^^ Gets the endpoints used by the server.
void Service_AddReferences(UA_Server *server, UA_Session *session, const UA_AddReferencesRequest *request, UA_AddReferencesResponse *response)
#define UA_NS0ID_HASHISTORICALCONFIGURATION
UA_StatusCode(* UA_copySignature)(const void *src, void *dst, const UA_DataType *type)
void pcg32_srandom_r(pcg32_random_t *rng, uint64_t initial_state, uint64_t initseq)
UA_ExpandedNodeId targetNodeId
UA_Boolean hasServerPicoseconds
#define UA_TYPES_RELATIVEPATHELEMENT
UA_ExtensionObject * notificationData
AddNodesResult ^^^^^^^^^^^^^^ A result of an add node operation.
#define UA_TYPES_DOUBLE
Double ^^^^^^.
#define LIST_INSERT_AFTER(listelm, elm, field)
void(* releaseRecvBuffer)(UA_Connection *connection, UA_ByteString *buf)
UA_String securityPolicyUri
UA_ServerNetworkLayer UA_ServerNetworkLayerTCP(UA_ConnectionConfig conf, UA_UInt16 port)
#define UA_STATUSCODE_BADCONTENTFILTERINVALID
CreateSessionResponse ^^^^^^^^^^^^^^^^^^^^^ Creates a new session with the server.
const UA_ByteString UA_BYTESTRING_NULL
#define UA_STATUSCODE_BADFILTEROPERATORUNSUPPORTED
#define UA_TYPES_BROWSENEXTRESPONSE
UA_NodeClass
NodeClass ^^^^^^^^^ A mask specifying the class of the node.
UA_StatusCode UA_SecureChannelManager_renew(UA_SecureChannelManager *cm, UA_Connection *conn, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
UA_UInt32 remainingPathIndex
UA_StatusCode UA_Variant_copyRange(const UA_Variant *src, UA_Variant *dst, const UA_NumericRange range)
#define UA_TYPES_INT64
Int64 ^^^^^.
#define UA_NS0ID_AGGREGATES
#define UA_STATUSCODE_BADSOURCENODEIDINVALID
UA_TimestampsToReturn
TimestampsToReturn ^^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_EVENTTYPESFOLDER
UA_StatusCode UA_Server_addRepeatedJob(UA_Server *server, UA_Job job, UA_UInt32 interval, UA_Guid *jobId)
Repeated jobs
RegisterNodesRequest ^^^^^^^^^^^^^^^^^^^^ Registers one or more nodes for repeated use within a sessi...
size_t nodesToUnregisterSize
EndpointDescription ^^^^^^^^^^^^^^^^^^^ The description of a endpoint that can be used to access a se...
#define UA_BINARY_OVERLAYABLE_FLOAT
Float Endianness ^^^^^^^^^^^^^^^^ The definition UA_BINARY_OVERLAYABLE_FLOAT is true when the floatin...
UA_LocalizedText description
ObjectAttributes ^^^^^^^^^^^^^^^^ The attributes for an object node.
#define UA_NS0ID_SERVER_SERVICELEVEL
#define UA_TYPES_QUERYNEXTREQUEST
#define UA_STATUSCODE_BADTCPSERVERTOOBUSY
#define UA_TYPES_ACTIVATESESSIONRESPONSE
#define UA_TYPES_REQUESTHEADER
UA_DataTypeMember * members
UA_ResponseHeader responseHeader
#define UA_TYPES_UINT16
UInt16 ^^^^^^.
UA_SecureChannel * channel
UA_StatusCode UA_encodeBinary(const void *src, const UA_DataType *type, UA_exchangeEncodeBuffer exchangeCallback, void *exchangeHandle, UA_ByteString *dst, size_t *offset) UA_FUNC_ATTR_WARN_UNUSED_RESULT
#define UA_TYPES_VARIANT
Variant ^^^^^^^.
void UA_SecureChannelManager_cleanupTimedOut(UA_SecureChannelManager *cm, UA_DateTime nowMonotonic)
UA_UInt32 receiveBufferSize
UA_TimestampsToReturn timestampsToReturn
DeleteReferencesResponse ^^^^^^^^^^^^^^^^^^^^^^^^ Delete one or more references from the server addre...
#define UA_TYPES_NODECLASS
#define UA_STATUSCODE_GOODOVERLOAD
void(* close)(UA_Connection *connection)
UA_NODE_BASEATTRIBUTES UA_Boolean executable
void UA_Variant_setArray(UA_Variant *v, void *UA_RESTRICT array, size_t arraySize, const UA_DataType *type)
#define UA_STATUSCODE_BADVIEWTIMESTAMPINVALID
void Service_CreateSession(UA_Server *server, UA_SecureChannel *channel, const UA_CreateSessionRequest *request, UA_CreateSessionResponse *response)
Session Service Set This Service Set defines Services for an application layer connection establishme...
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_SERVERPROFILEARRAY
size_t availableSequenceNumbersSize
#define UA_STATUSCODE_BADIDENTITYTOKENINVALID
#define UA_fd_set(fd, fds)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES
struct UA_NotificationMessageEntry UA_NotificationMessageEntry
#define UA_STATUSCODE_BADBROWSEDIRECTIONINVALID
#define UA_STRING_STATIC(s)
#define TAILQ_FOREACH_SAFE(var, head, field, tvar)
#define UA_STATUSCODE_GOODLOCALOVERRIDE
#define SLIST_HEAD(name, type)
#define UA_TYPES_SERVERSTATE
#define LIST_INSERT_HEAD(head, elm, field)
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEABORTBODY
MonitoredItemCreateRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
void(* UA_Logger)(UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args)
The signature of the logger.
ModifyMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_SecurityTokenRequestType
SecurityTokenRequestType ^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether a token if being created or renew...
#define UA_NS0ID_HASEVENTSOURCE
UA_UInt32 * monitoredItemIds
#define UA_NS0ID_SERVER_SERVERDIAGNOSTICS
#define UA_STATUSCODE_BADSECURITYPOLICYREJECTED
UA_STATIC_ASSERT(sizeof(UA_MessageType)==sizeof(UA_Int32), enum_must_be_32bit)
#define UA_NS0ID_CLOSESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADINVALIDSTATE
#define UA_STATUSCODE_BADCONDITIONALREADYENABLED
#define UA_NS0ID_DIAGNOSTICINFO
#define UA_NS0ID_SERVER_GETMONITOREDITEMS
#define UA_STATUSCODE_BADFILTERLITERALINVALID
#define UA_STATUSCODE_BADARGUMENTSMISSING
#define UA_STATUSCODE_UNCERTAINSUBSTITUTEVALUE
#define UA_STATUSCODE_BADNODATAAVAILABLE
#define UA_STATUSCODE_UNCERTAINDEPENDENTVALUECHANGED
UA_StatusCode Service_AddNodes_existing(UA_Server *server, UA_Session *session, UA_Node *node, const UA_NodeId *parentNodeId, const UA_NodeId *referenceTypeId, const UA_NodeId *typeDefinition, UA_InstantiationCallback *instantiationCallback, UA_NodeId *addedNodeId)
UA_NodeId referenceTypeId
UA_UInt32 * arrayDimensions
#define UA_TYPES_OBJECTTYPEATTRIBUTES
UA_StatusCode UA_Array_copy(const void *src, size_t size, void **dst, const UA_DataType *type)
#define UA_STATUSCODE_BADATTRIBUTEIDINVALID
UA_Double samplingInterval
UA_MonitoringMode monitoringMode
#define UA_TYPES_CREATESESSIONREQUEST
ContentFilterElementResult ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_BROWSEPATHTARGET
#define UA_TYPES_NODETYPEDESCRIPTION
#define UA_DATETIME_UNIX_EPOCH
#define UA_STATUSCODE_BADINVALIDTIMESTAMP
#define LIST_FOREACH(var, head, field)
void Service_Write(UA_Server *server, UA_Session *session, const UA_WriteRequest *request, UA_WriteResponse *response)
#define UA_TYPES_OBJECTATTRIBUTES
BrowseDescription ^^^^^^^^^^^^^^^^^ A request to browse the the references from a node...
#define UA_NS0ID_BASEVARIABLETYPE
#define UA_NodeStore_newMethodNode()
#define UA_STATUSCODE_BADCERTIFICATEURIINVALID
#define UA_NS0ID_MODELLINGRULETYPE
#define UA_STATUSCODE_BADTCPSECURECHANNELUNKNOWN
#define UA_NS0ID_SERVERSTATUSTYPE
UA_StatusCode UA_Client_deleteNode(UA_Client *client, const UA_NodeId nodeId, UA_Boolean deleteTargetReferences)
#define UA_NS0ID_READREQUEST_ENCODING_DEFAULTBINARY
#define UA_NS0ID_EXPANDEDNODEID
struct session_list_entry session_list_entry
#define UA_RESTRICT
Non-aliasing pointers
#define UA_STATUSCODE_BADFILTEROPERATORINVALID
#define UA_TYPES_QUERYDATADESCRIPTION
void Service_ModifyMonitoredItems(UA_Server *server, UA_Session *session, const UA_ModifyMonitoredItemsRequest *request, UA_ModifyMonitoredItemsResponse *response)
int __secs_to_tm(long long t, struct tm *tm)
UA_StatusCode UA_Client_deleteReference(UA_Client *client, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_ExpandedNodeId targetNodeId, UA_Boolean deleteBidirectional)
size_t referencesToDeleteSize
#define UA_STATUSCODE_BADCONFIGURATIONERROR
#define UA_STATUSCODE_BADTOOMANYMONITOREDITEMS
UA_UInt32 revisedMaxKeepAliveCount
status(* UA_encodeBinarySignature)(const void *UA_RESTRICT src, const UA_DataType *type)
void Service_RegisterNodes(UA_Server *server, UA_Session *session, const UA_RegisterNodesRequest *request, UA_RegisterNodesResponse *response)
UA_UInt16 binaryEncodingId
size_t arrayDimensionsSize
UA_Boolean userExecutable
UA_SubscriptionAcknowledgement * subscriptionAcknowledgements
void Service_Republish(UA_Server *server, UA_Session *session, const UA_RepublishRequest *request, UA_RepublishResponse *response)
UA_String targetServerUri
UA_UInt32 requestedLifetime
UA_BrowseResult * results
#define UA_NS0ID_MODELLINGRULE_OPTIONAL
UA_TimestampsToReturn timestampsToReturn
#define UA_NS0ID_HASCHILD
union UA_NodeId::@0 identifier
UA_ByteString clientNonce
#define UA_NS0ID_OBJECTTYPESFOLDER
#define UA_TYPES_DATETIME
DateTime ^^^^^^^^.
UA_ReadValueId itemToMonitor
UA_ResponseHeader responseHeader
UA_Client * UA_Client_new(UA_ClientConfig config)
#define UA_STATUSCODE_BADDATATYPEIDUNKNOWN
UA_UsernamePasswordLogin usernamePasswords[2]
#define UA_NS0ID_REPUBLISHREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_SETPUBLISHINGMODERESPONSE
#define UA_TYPES_MONITORINGMODE
#define UA_TYPES_REFERENCEDESCRIPTION
#define UA_TYPES_ADDREFERENCESREQUEST
UA_DataChangeTrigger
DataChangeTrigger ^^^^^^^^^^^^^^^^^.
#define UA_TYPES_VARIABLETYPEATTRIBUTES
size_t serverEndpointsSize
QueryFirstResponse ^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_APPLICATIONDESCRIPTION
size_t monitoredItemIdsSize
UA_ReadValueId * nodesToRead
UA_MonitoringMode monitoringMode
struct UA_SessionManager UA_SessionManager
UA_ExpandedNodeId targetId
RepublishRequest ^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADTCPNOTENOUGHRESOURCES
#define UA_TYPES_USERTOKENPOLICY
UA_NotificationMessage notificationMessage
#define UA_STATUSCODE_UNCERTAINENGINEERINGUNITSEXCEEDED
#define UA_STATUSCODE_BADFILTERNOTALLOWED
UA_RequestHeader requestHeader
DataChangeNotification ^^^^^^^^^^^^^^^^^^^^^^.
const char * LogCategoryNames[6]
UA_UInt32 sendSequenceNumber
const UA_DataType UA_TYPES[UA_TYPES_COUNT]
#define UA_TYPES_XMLELEMENT
XmlElement ^^^^^^^^^^.
UA_NodeId * nodesToRegister
#define UA_STRING_ALLOC(CHARS)
#define UA_TYPES_DIAGNOSTICINFO
DiagnosticInfo ^^^^^^^^^^^^^^.
#define UA_TYPES_CREATEMONITOREDITEMSREQUEST
#define UA_TYPES_DELETEMONITOREDITEMSRESPONSE
#define UA_STATUSCODE_BADWAITINGFORINITIALDATA
void Service_Browse_single(UA_Server *server, UA_Session *session, struct ContinuationPointEntry *cp, const UA_BrowseDescription *descr, UA_UInt32 maxrefs, UA_BrowseResult *result)
size_t monitoredItemsSize
UA_UInt32 monitoredItemId
#define UA_EMPTY_ARRAY_SENTINEL
PublishResponse ^^^^^^^^^^^^^^^.
UA_RelativePath relativePath
UA_StatusCode __UA_Client_readAttribute(UA_Client *client, const UA_NodeId *nodeId, UA_AttributeId attributeId, void *out, const UA_DataType *outDataType)
#define UA_TYPES_CREATEMONITOREDITEMSRESPONSE
UA_NodeId * registeredNodeIds
UA_UserTokenType
UserTokenType ^^^^^^^^^^^^^ The possible user token types.
UA_StatusCode UA_copy(const void *src, void *dst, const UA_DataType *type)
UA_LocalizedText displayName
UA_StatusCode UA_Server_delayedCallback(UA_Server *server, UA_ServerCallback callback, void *data)
#define UA_malloc(_p_size)
UA_Variant * outputArguments
void UA_deleteMembers(void *p, const UA_DataType *type)
#define UA_STATUSCODE_BADTYPEDEFINITIONINVALID
UA_UserTokenPolicy * userIdentityTokens
#define UA_STATUSCODE_BADNODATA
BrowseRequest ^^^^^^^^^^^^^ Browse the references for one or more nodes from the server address space...
UA_StatusCode UA_Connection_receiveChunksBlocking(UA_Connection *connection, UA_ByteString *chunks, UA_Boolean *realloced, UA_UInt32 timeout)
#define UA_STATUSCODE_UNCERTAINNOCOMMUNICATIONLASTUSABLEVALUE
UA_StatusCode UA_Server_write(UA_Server *server, const UA_WriteValue *value)
The following node attributes cannot be changed once a node has been created:
#define UA_STATUSCODE_BADFILTEROPERANDINVALID
size_t monitoredItemIdsSize
#define UA_TRANSPORT_TCPMESSAGEHEADER
#define UA_MAXCONTINUATIONPOINTS
NodeTypeDescription ^^^^^^^^^^^^^^^^^^^.
struct UA_DiagnosticInfo UA_DiagnosticInfo
DiagnosticInfo ^^^^^^^^^^^^^^ A structure that contains detailed error and diagnostic information ass...
#define UA_TYPES_REGISTERNODESRESPONSE
#define UA_TYPES_DELETENODESREQUEST
#define UA_FUNC_ATTR_WARN_UNUSED_RESULT
UA_UInt32 revisedQueueSize
UA_Double requestedSessionTimeout
UA_ResponseHeader responseHeader
#define UA_TYPES_CALLRESPONSE
#define UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED
#define UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID
#define TAILQ_INSERT_TAIL(head, elm, field)
BrowsePathResult ^^^^^^^^^^^^^^^^ The result of a translate opearation.
#define UA_BUILTIN_TYPES_COUNT
#define UA_STATUSCODE_BADREQUESTTOOLARGE
struct pcg_state_setseq_64 pcg32_random_t
#define UA_TYPES_ENDPOINTDESCRIPTION
OpenSecureChannelRequest ^^^^^^^^^^^^^^^^^^^^^^^^ Creates a secure channel with a server...
#define UA_OPEN62541_VER_PATCH
#define UA_TYPES_NODEATTRIBUTESMASK
#define UA_NS0ID_FOLDERTYPE
#define UA_STATUSCODE_BADNOTWRITABLE
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
UA_Double minimumSamplingInterval
UA_BrowseResult * results
AddReferencesRequest ^^^^^^^^^^^^^^^^^^^^ Adds one or more references to the server address space...
#define UA_TYPES_QUERYFIRSTRESPONSE
#define UA_STATUSCODE_BADREQUESTNOTALLOWED
#define UA_STATUSCODE_BADDECODINGERROR
#define UA_MSEC_TO_DATETIME
void UA_SecureChannel_attachSession(UA_SecureChannel *channel, UA_Session *session)
#define UA_STATUSCODE_BADMAXAGEINVALID
UA_RequestHeader requestHeader
#define UA_TYPES_CONTENTFILTERELEMENT
#define TAILQ_HEAD(name, type)
#define UA_STATUSCODE_BADNOENTRYEXISTS
UA_MessageType
MessageType ^^^^^^^^^^^ Message Type and whether the message contains an intermediate chunk...
#define UA_STATUSCODE_BADCERTIFICATEUSENOTALLOWED
UA_Boolean moreNotifications
#define UA_STATUSCODE_BADMONITORINGMODEINVALID
#define UA_TYPES_SETMONITORINGMODEREQUEST
#define UA_TYPES_NODEID
NodeId ^^^^^^.
UA_StatusCode UA_ByteString_allocBuffer(UA_ByteString *bs, size_t length)
size_t endpointDescriptionsSize
ModifySubscriptionResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^.
UnregisterNodesResponse ^^^^^^^^^^^^^^^^^^^^^^^ Unregisters one or more previously registered nodes...
struct UA_Job::@5::@7 methodCall
PublishRequest ^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_NAMESPACEARRAY
#define UA_NS0ID_SERVER_GETMONITOREDITEMS_INPUTARGUMENTS
UA_AsymmetricAlgorithmSecurityHeader serverAsymAlgSettings
MonitoredItemModifyRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADDOMINANTVALUECHANGED
#define SIMPLEQ_INSERT_TAIL(head, elm, field)
#define UA_STATUSCODE_BADEVENTIDUNKNOWN
int64_t UA_Int64
Int64 ^^^^^ An integer value between -9 223 372 036 854 775 808 and 9 223 372 036 854 775 807...
#define UA_TYPES_CREATESUBSCRIPTIONRESPONSE
#define UA_STATUSCODE_BADNODEIDREJECTED
#define UA_TYPES_EXPANDEDNODEID
ExpandedNodeId ^^^^^^^^^^^^^^.
UA_ResponseHeader responseHeader
CreateMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_CONTENTFILTERRESULT
#define UA_TYPES_DATATYPEATTRIBUTES
void Service_BrowseNext(UA_Server *server, UA_Session *session, const UA_BrowseNextRequest *request, UA_BrowseNextResponse *response)
UA_NodeId referenceTypeId
#define LIST_REMOVE(elm, field)
#define UA_TYPES_BROWSERESULTMASK
#define UA_STATUSCODE_BADAGGREGATEINVALIDINPUTS
#define UA_TRANSPORT_TCPERRORMESSAGE
void Service_SetPublishingMode(UA_Server *server, UA_Session *session, const UA_SetPublishingModeRequest *request, UA_SetPublishingModeResponse *response)
#define UA_TYPES_ADDNODESRESULT
#define UA_PRINTF_STRING_FORMAT
MonitoredItemNotification ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADNODEIDINVALID
BrowsePathTarget ^^^^^^^^^^^^^^^^ The target of the translated path.
const UA_VariableTypeNode * getVariableNodeType(UA_Server *server, const UA_VariableNode *node)
#define UA_NS0ID_SERVERSTATE
ModifySubscriptionRequest ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYCONFIRMED
ModifyMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
void UA_Connection_detachSecureChannel(UA_Connection *connection)
#define UA_STATUSCODE_BADSHUTDOWN
#define CHECK_ATTRIBUTES(TYPE)
UA_LocalizedText description
AnonymousIdentityToken ^^^^^^^^^^^^^^^^^^^^^^ A token representing an anonymous user.
#define UA_TYPES_OPENSECURECHANNELRESPONSE
UA_StatusCode(* UA_EditNodeCallback)(UA_Server *, UA_Session *, UA_Node *, const void *)
UA_StatusCode UA_SessionManager_init(UA_SessionManager *sm, UA_Server *server)
#define UA_STATUSCODE_BADCONDITIONALREADYSHELVED
#define UA_NODE_BASEATTRIBUTES
#define UA_NS0ID_CALLREQUEST_ENCODING_DEFAULTBINARY
#define UA_TRANSPORT_COUNT
Every type is assigned an index in an array containing the type descriptions.
LocalizedText ^^^^^^^^^^^^^ Human readable text with an optional locale identifier.
UA_Boolean hasSourceTimestamp
UA_UInt32 revisedLifetimeCount
#define UA_STATUSCODE_BADTCPMESSAGETYPEINVALID
#define UA_TYPES_BUILDINFO
#define UA_TYPES_GETENDPOINTSRESPONSE
UA_ChannelSecurityToken nextSecurityToken
#define UA_STATUSCODE_UNCERTAINLASTUSABLEVALUE
void UA_MoniteredItem_SampleCallback(UA_Server *server, UA_MonitoredItem *monitoredItem)
UA_RequestHeader requestHeader
ContentFilterElement ^^^^^^^^^^^^^^^^^^^^.
#define UA_TRANSPORT_SEQUENCEHEADER
#define UA_STATUSCODE_BADCERTIFICATEISSUERUSENOTALLOWED
#define UA_STATUSCODE_BADENDOFSTREAM
UA_StatusCode UA_Server_removeRepeatedJob(UA_Server *server, UA_Guid jobId)
#define UA_TYPES_QUALIFIEDNAME
QualifiedName ^^^^^^^^^^^^^.
UA_LocalizedText displayName
#define UA_NS0ID_BROWSEREQUEST_ENCODING_DEFAULTBINARY